mongoDB - 查找特定结果,文档以不同方式嵌套

mongoDB - find a specific result, with a document nested in different ways

我在 MongoDB 中的命令行有点问题。这是我的一份文件的样子:

{
    "id": "6249c4eb85a7563e673b4360",
    "collection": {
        "id": "6244099cb9ebc40007ac2ce3"
    },
    "characters": [
        {
            "id": "6244074ab9ebc40007ac2cf9"
        },
                {
            "id": "6244074ab9ebc40007ac2ce1"
        }
    ],
}

然后,在MongoDB shell,我尝试根据他们的标准检索一些书,这里是一个例子:

db.comic.find({
    characters: {
        $elemMatch:{
            _id: {
                $in: [
                    ObjectId("6244074ab9ebc40007ac2ce5")
                ]
            }
        }
    },
    collection: {
        $elemMatch:{
            _id: {
                $in: [
                    ObjectId("6244099cb9ebc40007ac2cfb")
                ]
            }
        }
    }
}).pretty()

如果我删除“collection”部分,我会找到与角色相关的书籍。但是,如果我把“collection”部分放回去,我没有结果。我认为这与“collection”不是数组有关,但我不知道如何解决这个问题,知道目标是在搜索中有几个collection,因此“$elemMatch”和“$in”。

在此先感谢您的帮助,祝您有愉快的一天。

您需要使用 collection._id 而不是 collection:{$elemMatch:{_id,因为 $elemMatch 用于在数组中查找对象。

因此您的查询应如下所示:

db.comic.find({
    characters: {
        $elemMatch:{
            _id: {
                $in: [
                    ObjectId("6244074ab9ebc40007ac2ce5")
                ]
            }
        }
    },
    "collection._id": {
                $in: [ObjectId("6244099cb9ebc40007ac2cfb")]
    }
}).pretty()