2013-11-21 8 views
6

में किसी फ़ील्ड के लिए सभी मूल्य प्राप्त करने का सबसे प्रभावी तरीका इसलिए मैं वास्तव में मोंगोडीबी और दस्तावेज़ संग्रहण सामग्री के लिए नया हूं। मुझे निम्नलिखित करने के लिए सबसे सुरुचिपूर्ण और कुशल समाधान खोजने का प्रयास करने में कठिनाई हो रही है:MongoDB और Node.js

मेरे पास परीक्षण नामक संग्रह है। प्रत्येक परीक्षण में फ़ील्ड के मालिक के साथ कार्रवाई होती है। नीचे देखें:

{ 
"_id" : ObjectId("528c731a810761651c00000f"), 
"actions" : [ 
    { 
     "action" : "6784", 
     "owner" : "MERCHAND_1", 
     "_id" : ObjectId("528c7292810761651c00000e") 
    }, 
    { 
     "action" : "1", 
     "owner" : "MERCHAND_1", 
     "_id" : ObjectId("528c7292810761651c00000d") 
    }, 
    { 
     "action" : "1358", 
     "owner" : "MERCHAND_2", 
     "_id" : ObjectId("528c7292810761651c00000c") 
    } 
], 
"name" : "Test 1", 
"product" : ObjectId("528bc4b3a0f5430812000010") 

}

मैं प्रत्येक विशिष्ट मालिक मूल्य Node.js & MongoDB का उपयोग कर (मैं नेवला ड्राइवर का उपयोग कर रहा) की एक सूची (सरणी) कैसे हो सकता है। क्या यह मोंगोसाइड या नोड.जेएस पक्ष पर करना बेहतर है? उदाहरण के लिए मैं पिछले मेज पर समारोह चलाते हैं, तो इसे वापस करना चाहिए:

[ 
    { 
     "owner":"MERCHAND_1" 
    }, 
    { 
     "owner":"MERCHAND_2" 
    } 
] 

उत्तर

7

आप कमांड

db.runCommand({ 
    distinct: 'tests', 
    key: 'actions.owner' 
}); 

जो आप

{ 
    "values" : [ 
    "MERCHAND_1", 
    "MERCHAND_2" 
    ], 
    "stats" : {...}, 
    "ok" : 1 
} 

यह हर शामिल होंगे देता है का उपयोग कर MongoDB साथ ऐसा कर सकतेमें दस्तावेज़संग्रह। यदि, हालांकि, आप केवल एक दस्तावेज़ की जांच करना चाहते थे, तो आप कमांड को

db.runCommand({ 
    distinct: 'tests', 
    key: 'actions.owner', 
    query: { _id: ObjectId("528c731a810761651c00000f") } 
}); 
+0

धन्यवाद, यह सब मुझे जानने की जरूरत है। RunCommand के बीच क्या अंतर है और सीधे अलग फ़ंक्शन पर कॉल करना है? –

+0

'db.collection.distinct()' विधि 'विशिष्ट' कमांड के चारों ओर एक रैपर प्रदान करता है। यह वास्तव में पृष्ठभूमि में कमांड को कॉल कर रहा है, लेकिन 'आंकड़े' या' ठीक 'गुणों को वापस नहीं करता है। – Travis

11

MongoDB यह करने के लिए एक distinct आदेश का समर्थन करता है। आप इस मामले में एरे के भीतर फ़ील्ड को लक्षित करने के लिए डॉट नोटेशन का उपयोग कर सकते हैं।

db.test.distinct('actions.owner') 

आउटपुट: खोल में

[ 
    "MERCHAND_1", 
    "MERCHAND_2" 
] 
+0

वाह इतना शांत कर सकते हैं। धन्यवाद। –

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