2011-03-17 12 views
5

इसलिए मुझे यह सरल लॉगिन फ़ंक्शन मिला है जो डेटाबेस में पासवर्ड के साथ ईमेल पते से मिलान करने का प्रयास कर रहा है और उपयोगकर्ता के रूप में डेटा के माध्यम से डेटा के साथ तुलना करें।php में mongo से पूछताछ कैसे करें?

function login($email, $password){ 
    $m = new Mongo("localhost"); 
    $m->connect(); 
    $db = $m->users; 
    $collection = $db->test_collection; 

    echo "<pre>"; 
    var_dump($collection->findOne(array('name' => 'john'))); //returns correctly 
    var_dump($collection->find(array('name' => 'john'))); //returns mongo cursor object 
    echo "</pre>"; 
} 

मुझे समझ में नहीं आता कि क्यों() केवल कर्सर ऑब्जेक्ट देता है। जवाब?

यह मोंगो दस्तावेज़

array(5) { 
    ["_id"]=> 
    object(MongoId)#22 (1) { 
    ["$id"]=>"4d7eaa848baf84d32b000000" 
    } 
    ["activated"]=> (true) 
    ["email"]=> "[email protected]" 
    ["name"]=> "john" 
    ["password"]=> "334c4a4c42fdb79d7ebc3e73b517e6f8" 
} 

मैं एक "कहाँ" क्वेरी कि दोनों ईमेल और पासवर्ड एक ही दस्तावेज़ में मिलेगा करना होगा कैसी है? मैं स्पष्ट रूप से खोजकर्ताओं को खोजने के लिए paramaters को सही नहीं कर रहा हूं() और findOne() प्रश्न। PHP में सही वाक्यविन्यास क्या है?

उत्तर

5

find एक कर्सर वापस करना है - आप यहां उनके बारे में अधिक पढ़ सकते हैं: http://www.mongodb.org/display/DOCS/Queries+and+Cursors। कर्सर से दस्तावेज़ प्राप्त करने के लिए, आपको इसे फिर से चालू करना होगा।

आपके मामले में, findOne शायद यह है कि आप तब भी हैं जब आप एक ही उपयोगकर्ता नाम और पासवर्ड वाले एकाधिक उपयोगकर्ताओं की अपेक्षा नहीं करते हैं। FindOne फ़ंक्शन हमेशा एक दस्तावेज़ पर वापस आता है, इसलिए कर्सर की कोई आवश्यकता नहीं है।

आपके प्रश्नों में एक से अधिक विधेय है, बस आपकी क्वेरी सरणी के लिए और अधिक क्षेत्रों को जोड़ने:

var_dump($collection->findOne(array('name' => 'john', 'password' => '334c4a4c42fdb79d7ebc3e73b517e6f8'))); 

(अगर वह सही पीएचपी है - मेरी पीएचपी जंग लगी एक सा है)

1

कोशिश

return count($collection->find(array('name' => $name, 'password' => $password))); 
संबंधित मुद्दे