在阵列上执行findOne()时,Meteor和Mongo DB会提供不同的结果

时间:2015-05-30 17:19:27

标签: arrays mongodb meteor

我有一个包含一系列对象的集合(我只是放了一些字段,架构运行正常)。

收藏联系人:

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"}}});

在Mongo DB控制台上,它返回:

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

就像我想要的那样 - 只是阵列的一个元素。

当我在Meteor(浏览器控制台)上执行相同操作时:

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

我得到了数组的所有元素。怎么解决这个?我想要与Mongo DB中的结果相同。

1 个答案:

答案 0 :(得分:2)

您可以使用._find()下划线方法只检索所需的文档:

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