$ all查询返回没有结果

时间:2013-01-28 15:43:21

标签: mongodb

我在我的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
}

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分: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
}