0

我在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")
4

1 回答 1

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") } );
于 2013-07-12T15:48:13.420 回答