为什么mongo不在数组中返回对象?

时间:2012-10-18 19:32:43

标签: mongodb mongodb-query

我正在搜索文档中contacts数组中包含特定_id的文档。所以这是结构:

{
"_id": ObjectId("505c2daea9d397f2260001cd"),
 "contacts": [
     {
       "userGroupId": ObjectId("50422b53743d6c7c0e000000"),
       "userId": ObjectId("5061f8c66096eee07d000008") 
    },
     {
       "userGroupId": ObjectId("505bf9476096ee990200000e"),
       "userId": ObjectId("505c2daea9d397f2260001ce") 
    },
      {
       "userGroupId": ObjectId("50422b75743d6c700e000004"),
       "userId": ObjectId("506cff736096ee1e26000384") 
    },
     {
       "userGroupId": ObjectId("50422b66743d6c6b0e000000"),
       "userId": ObjectId("505c2daea9d397f2260001cf") 
    },
     {
       "userGroupId": ObjectId("5050e86aa9d3977b67000000"),
       "userId": ObjectId("506494ef6096ee021f000064") 
    },
     {
       "userGroupId": ObjectId("50422b53743d6c7c0e000000"),
       "userId": ObjectId("504d72246096ee2348000008") 
    },
     {
       "userId": ObjectId("50735e8e6096ee7c510002b9"),
       "userGroupId": ObjectId("5046c73e6096ee1b77000001") 
    } 
  ]
}

这是第二份文件:

{
 "_id": ObjectId("505c2da0a9d397f2260000b7"),
"contacts": [
      {
       "userGroupId": ObjectId("50422b66743d6c6b0e000000"),
       "userId": ObjectId("505c2da0a9d397f2260000b8") 
    },
     {
       "userId": ObjectId("5061f8c66096eee07d000008"),
       "userGroupId": ObjectId("50422b53743d6c7c0e000000") 
    },
     {
       "userId": ObjectId("50735e8e6096ee7c510002b9"),
       "userGroupId": ObjectId("5046c73e6096ee1b77000001") 
    } 
  ]
}

您会注意到两个文档中都包含ObjectId(“50735e8e6096ee7c510002b9”)的userId。我运行这个命令:

db.collection.find({ 'contacts': 
    {$elemMatch: { userId: ObjectId("50735e8e6096ee7c510002b9") } }
});

哪个(我认为)应该返回两个文件。但它只返回第二个文件。不是第一个。我也尝试过:

db.collection.find({'contacts.userId': ObjectId("50735e8e6096ee7c510002b9") });

与$ elemMatch查询的作用相同。

我可能错过了一些非常基本的东西,但如果你们能提供一些建议,我会非常感激。

1 个答案:

答案 0 :(得分:0)

这是应用层的问题,而不是Mongo。其中一个记录是数字键,另一个不是,我刚刚使用Rock Mongo,这似乎是所有数组的关键。

感谢你的帮助JohnnyHK