关于mongo查询的第一个和最后一个位置的属性声明?

时间:2017-12-13 12:42:11

标签: javascript arrays node.js mongodb express

我正在查询检索芒果收集的数据,我以两种不同的方式进行相同的查询。

工作查询

db.getCollection('routes').find({"routes.routeId": "r1qJo2zWG"}, {routes : {"$elemMatch": {"routeId": "r1qJo2zWG"}}})

无效查询

db.getCollection('routes').find({routes : {"$elemMatch": {"routeId": "r1qJo2zWG"}}}, {"routes.routeId": "r1qJo2zWG"})

查询工作取决于属性声明,例如在第一个/最后一个位置的“routes.routeId”。

明白为什么会在mongodb查询中发生这种情况。

1 个答案:

答案 0 :(得分:2)

您正在混合查询和投影。这两个查询都按预期工作。

find方法同时进行查询和投影。

第一个例子(有效)

db.getCollection('routes').find({"routes.routeId": "r1qJo2zWG"}, {routes : {"$elemMatch": {"routeId": "r1qJo2zWG"}}})

查询部分

{"routes.routeId": "r1qJo2zWG"}

投影部分

{routes : {"$elemMatch": {"routeId": "r1qJo2zWG"}}}

您正在查询路由数组的routeId值为" r1qJo2zWG"然后是$elemMatch(projection)来限制routes元素以输出匹配的路由,其routeId值为" r1qJo2zWG"

第二个例子(无效)

db.getCollection('routes').find({routes : {"$elemMatch": {"routeId": "r1qJo2zWG"}}}, {"routes.routeId": "r1qJo2zWG"})

查询部分

{routes : {"$elemMatch": {"routeId": "r1qJo2zWG"}}}

投影部分

{"routes.routeId": "r1qJo2zWG"}

您正在使用$elemMatch(query)查询所有文档,其中routes数组的routeId值为" r1qJo2zWG" (与{" routes.routeId":" r1qJo2zWG"}和$elemMatch运算符完全相同,单个条件匹配)后跟无效投影{&#34 ; routes.routeId":" r1qJo2zWG"}。

正确的投影(如果使用)应为{" routes.routeId":1}以显示路径数组的所有路径ID值。