2015-05-30 128 views
3

做findOne()時,我有與它的對象數組的集合提供不同的結果(我只是把一些領域出來的,該架構可以正常使用)。流星和蒙戈DB在陣列

收藏聯繫人:

title: { 
    type: String, 
    label: "Title", 
    max: 200 
}, 
adresses: { 
    type: [Object], 
    optional: true 
    }, 
"adresses.$.id": { 
    type: String, 
    label: "ID" 
}, 
"adresses.$.street": { 
    type: String, 
    label: "street", 
    decimal: true, 
    optional: true 
} 

當我做了:

db.contacts.findOne({_id: "59gXADmH9GLNDjELo"}, {adresses: {$elemMatch: 
    {id: "xpdYRKGGjHJLnCevM"}}}); 

蒙戈DB控制檯上,它返回:

{ 
    "_id" : "59gXADmH9GLNDjELo", 
    "adresses" : [ 
    { 
     "id" : "xpdYRKGGjHJLnCevM", 
     "street" : "FakeStreet123"    
    } 
    ] 
} 

就像我希望它 - 僅1元陣列回來。

當我做同樣的流星(瀏覽器控制檯):

Contacts.findOne({_id: "59gXADmH9GLNDjELo"}, {adresses: {$elemMatch: 
    {id: "xpdYRKGGjHJLnCevM"}}}); 

我得到的數組的所有元素後面。如何解決這個問題?我想要得到和Mongo DB一樣的結果。

回答

2

你可以使用._find()下劃線方法只獲得該文件你想:

var doc = Contacts.findOne(
     {_id: "59gXADmH9GLNDjELo"}, 
     {adresses: { 
      $elemMatch: {id: "xpdYRKGGjHJLnCevM"} 
     } 
    }), 
    address = _.find(doc.adresses, function(address) { 
        return address._id === "xpdYRKGGjHJLnCevM" 
      }); 
+2

超好聽!非常感謝:) @chridam –