Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb 为什么mongo不返回数组中的对象?_Mongodb_Mongodb Query - Fatal编程技术网

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

Mongodb 为什么mongo不返回数组中的对象?,mongodb,mongodb-query,Mongodb,Mongodb Query,我正在搜索文档中联系人数组中包含特定_id的文档。结构如下: { "_id": ObjectId("505c2daea9d397f2260001cd"), "contacts": [ { "userGroupId": ObjectId("50422b53743d6c7c0e000000"), "userId": ObjectId("5061f8c66096eee07d000008") }, { "userGroupId":

我正在搜索文档中联系人数组中包含特定_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”)的用户ID。我运行以下命令:

db.collection.find({ 'contacts': 
    {$elemMatch: { userId: ObjectId("50735e8e6096ee7c510002b9") } }
});
我认为这两份文件都应该归还。但它只返回第二个文档。不是第一次。我也尝试过:

db.collection.find({'contacts.userId': ObjectId("50735e8e6096ee7c510002b9") });
它执行与$elemMatch查询相同的操作


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

这是应用层的问题,而不是Mongo。其中一个记录是数字键控的,另一个不是,我只是和Rock Mongo一起工作,它似乎对所有数组进行键控


感谢您的帮助JohnnyHK

我刚刚意识到contacts不是数组,它是一个数字索引对象。。(假设是php数组的转换造成的)-这是问题吗?那么为什么它会返回任何东西呢?
contacts
是一个数字键控对象而不是数组这一事实无疑是这里的问题。这些查询不应该返回任何内容(当我在这些文档上尝试它们时也不应该返回任何内容)。更正-Rock Mongo对此的解释不正确。我从控制台查看了数据,它是一个数组。更正了上面的代码。您的
$elemMatch
查询中缺少了一个
}
,但除此之外,它现在对我来说工作正常,这两个查询都返回了两个文档。谢谢,您是对的,我的实际文档要大得多,所以我简化了,这个示例不好,因为它在这里工作,但不是根据我的实际数据。可能索引已损坏或其他原因。非常感谢你的帮助。