这两个mongo“查询”有什么区别?

时间:2015-08-19 23:02:07

标签: mongodb

鉴于

具有这种结构的产品集合:

   {
        product: "Super Duper-o-phonic",
        price: 100000000000,
        reviews: [
            {
                user: "fred",
                comment: "Great!",
                rating: 5
            },
            {
                user: "tom",
                comment: "I agree with Fred, somewhat!",
                rating: 4
            }
        ]
    };

需要

查找价格超过10,000且评分为5或更高的所有产品。

这是我的解决方案(不正确):

db.catalog.find({
        $and: [
            {
                price: {
                    $gt: 10000
                }
            },
            {
                "reviews.rating": {
                    $gte: 5
                }
            }
        ]
    });

这是正确的解决方案:

db.catalog.find({

        "price": {
            "$gt": 10000
        },

        "reviews.rating": {
            "$gte": 5
        }
    });

我的解决方案和正确的解决方案之间存在什么差异?

2 个答案:

答案 0 :(得分:2)

来自MongoDB documentation

  

MongoDB在指定逗号分隔的表达式列表时提供隐式AND操作。当必须在多个表达式中指定相同的字段或运算符时,必须使用带有$和运算符的显式AND。

因此,在您的情况下,两个查询在功能上是相同的;但是,显式的$and运算符是不必要的。除非您需要,否则通常会将其遗漏。

答案 1 :(得分:2)

这两个查询应该做同样的事情,他们在我的几个测试中做了。另一方面,第二个更紧凑,因为当你只使用逗号时$and是隐含的。

正如您在评论中澄清的那样,您认为第一个查询错误的原因是它在MongoDB大学上被标记为错误。我想你应该在他们的论坛上问一下。

你的解决方案有效,读起来并不好。