2012-11-05 12 views
7

निम्न सर्वर विधि डुप्लिकेट कुंजी त्रुटियों को फेंक रही है क्योंकि उपयोगकर्ता नहीं मिल रहे हैं। एक ठेठ क्वेरी है: {सेवाओं: {फेसबुक: {आईडी: 'XXXX'}}}सर्वर पर एक उल्का उपयोगकर्ता ढूंढना

Meteor.methods 
    getUser: (query, data = {}) -> 
    user = Meteor.users.findOne(query) 
    return user if user? 
    user = _.extend(data, query) 
    user._id = Meteor.users.insert user 
    return user 

यह मेरी समझ है कि सर्वर तरीकों संग्रह में सभी दस्तावेजों तो क्यों उपयोगकर्ता पाया नहीं किया जाएगा करने के लिए उपयोग कर सकते है लेकिन डुप्लिकेट फेसबुक आईडी के कारण डालने में असफल रहा?

यह मेरे ओएसएक्स देव पर्यावरण पर पूरी तरह से काम करता है लेकिन मेरे यूबंटू सर्वर (बंडल) पर विफल रहता है और NODE_ENV = उत्पादन के साथ चल रहा है।

यहाँ लॉग उत्पादन होता है:

data: { services: { facebook: { id: 'xxxx' } } } (the query provided to getUser) 
data: undefined (the result of findOne) 
data: Exception while invoking method 'getUser' MongoError: E11000 duplicate key error index: thunderstruck.users.$services.facebook.id_1 dup key: { : "xxxx" } 
data:  at Db.wrap (/home/jeremy/deploy/thunderstruck/releases/20121105202012/bundle/server/node_modules/mongodb/lib/mongodb/db.js:1904:11) 
data:  at null.<anonymous> (/home/jeremy/deploy/thunderstruck/releases/20121105202012/bundle/server/node_modules/mongodb/lib/mongodb/collection.js:320:26) 
data:  at g (events.js:192:14) 
data:  at EventEmitter.emit (events.js:126:20) 
data:  at Db._callHandler (/home/jeremy/deploy/thunderstruck/releases/20121105202012/bundle/server/node_modules/mongodb/lib/mongodb/db.js:1439:25) 
data:  at Server.connect.connectionPool.on.server._serverState (/home/jeremy/deploy/thunderstruck/releases/20121105202012/bundle/server/node_modules/mongodb/lib/mongodb/connection/server.js:425:30) 
data:  at MongoReply.parseBody (/home/jeremy/deploy/thunderstruck/releases/20121105202012/bundle/server/node_modules/mongodb/lib/mongodb/responses/mongo_reply.js:127:5) 
data:  at Server.connect.connectionPool.on.server._serverState (/home/jeremy/deploy/thunderstruck/releases/20121105202012/bundle/server/node_modules/mongodb/lib/mongodb/connection/server.js:384:22) 
data:  at EventEmitter.emit (events.js:96:17) 
data:  at _connect (/home/jeremy/deploy/thunderstruck/releases/20121105202012/bundle/server/node_modules/mongodb/lib/mongodb/connection/connection_pool.js:136:13) 
+0

मुझे यह इस तरह की क्वेरी स्वरूपित करके काम कर रहा है: {"services.facebook.id": "xxxx"} लगता है कि घोंसला बहुत गहरा था। मैंने नोड-इंस्पेक्टर का उपयोग कर सर्वर पर विभिन्न प्रश्नों की कोशिश की और पाया कि 3 गहरे घोंसले वाले प्रश्न हमेशा अनिर्धारित लौटे। अभी भी अस्पष्ट क्यों है कि ओएसएक्स पर गहरा घोंसला क्यों काम करता है और लिनक्स पर विफल रहता है। –

उत्तर

14

उन विभिन्न MongoDB प्रश्न है, और आप निश्चित रूप से डॉटेड शैली है कि आप में स्विच करना चाहते हैं। Mongo Dot Notation दस्तावेज़ीकरण देखें।

Meteor.users.find({"services.facebook.id": "foo"}) 

किसी भी दस्तावेज़ एम्बेडेड संपत्ति आप मूल्य foo साथ की तलाश कर रहे है कि वापस आ जाएगी।

Meteor.users.find({services: {facebook: {id: "foo"}}}) 

केवल बिल्कुल कि संरचना के साथ दस्तावेजों से मेल खाता है। अगर एम्बेडेड फेसबुक दस्तावेज़ में अन्य फ़ील्ड हैं, तो यह मेल नहीं खाएगा। ऐसा लगता है कि आपके उत्पादन डीबी में दस्तावेज़ में अधिक फ़ील्ड हैं और इसलिए आपको कोई मैच नहीं मिल रहा था।

संबंधित मुद्दे