1

假设我有一个 mongo db 餐厅系列,其中包含一系列不同的食物,我想平均每个餐厅的“三明治”和“汉堡”的价格,即不包括牛排。在这种情况下,我如何匹配 3 种类型中的 2 种,或者换句话说,过滤掉牛排?

例如,对于匹配运算符,我可以(假设我已经展开数组)做这样的事情

{ $match : { foods : "burger" } }

但我想做更像这样的事情(不吃牛排)

   { $match : { foods : ["burger", "sandwich" ]} }

除了该代码不起作用。

你可以解释吗?

"_id" : ObjectId("50b59cd75bed76f46522c34e"),
"restaurant_id" : 0,
"foods" : [

    {
        "type" : "sandwich",
        "price" : 6.99
    },
    {
        "type" : "burger",
        "price" : 5.99
    },
    {
        "type" : "steak"
        "price" : 9.99
    }
]
4

2 回答 2

2

用于$in匹配多个值之一:

{ $match : { foods : { $in: ["burger", "sandwich" ]}}}
于 2013-09-15T00:24:10.700 回答
1

JohnyHK 的回答是正确而简洁的。

对于“你能解释一下吗?” 部分,当您按如下方式指定匹配时:

{ $match : { 食物 : ["burger", "sandwich" ]} }

您要求文档有一个字段“foods”,其中包含一个以“burger”和“sandwich”作为元素的数组。这是一个相等的比较。

运算符 $in 没有直接用 $match 解释,见这里: http ://docs.mongodb.org/manual/reference/aggregation/match/

因为 $in 是一个查询运算符,这里解释(链接自 $match): http ://docs.mongodb.org/manual/tutorial/query-documents/#read-operations-query-argument

于 2013-09-15T00:30:31.457 回答