我在mongo中有以下结构
{
"_id": ObjectId("5188deba4c2c989909000000"),
"_type": {
"0": "Model_Discs"
}
},
"title": "really cool cd",
"referencedBy": {
"0": {
"$ref": "discs",
"$id": ObjectId("4e171cade3a9f23359e98552")
},
"1": {
"$ref": "discs",
"$id": ObjectId("5045c3222b0a82ec46000000")
}
}
}
这实际上是一个索引数组,用于保存对其他文档的引用。我找到所有引用ObjectId(“5045c3222b0a82ec46000000”)的文档。 起初我写了“referencedBy.1。$ id”:ObjectId(“5045c3222b0a82ec46000000”),它不起作用(如预期的那样),因为ObjectId可以在其他文档的不同索引下找到 即。
referencedBy.1.$id
referencedBy.5.$id
referencedBy.3.$id
所以我需要找到引用我的ObjectId的所有文档,这些文档位于referencedBy DocumentSet下的任何位置。像
这样的东西"referencedBy.*.$id": ObjectId("5045c3222b0a82ec46000000")
答案 0 :(得分:1)
我不太明白为什么你有这么复杂的结构。特别是“0”和“1”键是有问题的,特别是处理PHP,因为它不像数字字符串键那样真正的数组。 $ ref / $ id字段来自MongoDBRef,它应该避免,因为它们没有为您提供任何功能。
你应该只有:
{
"_id": ObjectId("5188deba4c2c989909000000"),
"_type": "Model_Discs",
"title": "really cool cd",
"referencedBy": [
ObjectId("4e171cade3a9f23359e98552"),
ObjectId("5045c3222b0a82ec46000000")
]
}
然后您只需查询:
db.collection.find( { referencedBy: new ObjectId("5045c3222b0a82ec46000000") } );