1

我正在我的 Auction 收藏中尝试进行此类查询,目的是返回所有文档,其中包含:item == 2770dump == ObjectId("5104f03a46ab64d404000000") or ObjectId("51067f4946ab644003000000") or ObjectId("5106924e46ab64c81c000000").

{
    item: 2770,
    dump: {
        $all: [
            ObjectId("5104f03a46ab64d404000000"),
            ObjectId("51067f4946ab644003000000"),
            ObjectId("5106924e46ab64c81c000000")
        ]
    }
}

这个查询没有返回任何东西,但是这个(请注意,我使用 $all 运算符中包含的转储)返回给我一个文档列表。我是否忽略了有关 $all 运算符行为的某些内容?

{
    item: 2770,
    dump: ObjectId("5106924e46ab64c81c000000")
}

这是我的拍卖收藏中的文档示例

{
    _id: ObjectId("5106924e46ab64c81c000237"),
    auc: 1560105766,
    item: 2770,
    owner: "Ozrael",
    bid: 450000,
    buyout: 450000,
    quantity: 20,
    timeLeft: "VERY_LONG",
    dump: ObjectId("5106924e46ab64c81c000000"),
    faction: "horde",
    bidPricePerUnit: 22500,
    buyoutPricePerUnit: 22500
}
4

2 回答 2

2

我在查询中使用了错误的运算符,$all匹配整个数组,如文档中所述。

匹配包含任一指定值的文档的正确运算符是$in

于 2013-01-29T15:28:58.030 回答
0

当您使用$all时,结果集的每个文档都应该具有所有提到的值。您示例中的文档应具有以下结构:

{
    _id: ObjectId("5106924e46ab64c81c000237"),
    auc: 1560105766,
    item: 2770,
    owner: "Ozrael",
    bid: 450000,
    buyout: 450000,
    quantity: 20,
    timeLeft: "VERY_LONG",
    dump: [
            ObjectId("5104f03a46ab64d404000000"),
            ObjectId("51067f4946ab644003000000"),
            ObjectId("5106924e46ab64c81c000000")
          ],
    faction: "horde",
    bidPricePerUnit: 22500,
    buyoutPricePerUnit: 22500
}
于 2013-01-28T15:51:52.193 回答