首页 > 解决方案 > 为什么我的 $in 命令出现语法错误?

问题描述

for rest in restaurants.find({},{"restaurant_id" : 0,"name":1,"borough":1, "cuisine":1, "_id":0},{"borough": {$in: ["Bronx", "Queens"]}}).limit(20):
       print(rest)

为什么我会收到语法错误$in

更新的 mongoDB 仍然出现语法错误$in

for rest in restaurants.find({"borough":{$in:["Bronx", "Queens"]},{"restaurant_id" : 0, "_id":0}}).limit(20):
       print(rest)

标签: databasemongodb

解决方案


根据文档find只允许两个参数:查询和投影。

文档说:

  • 查询:使用查询运算符指定选择过滤器。
  • 投影:指定要在与查询过滤器匹配的文档中返回的字段。

但你的查询是这样的:

find({/*empty object*/}, {projection}, {query} )

使用 en 空对象作为查询是获取所有数据,就像SELECT *在 SQL 中一样。因此,您的查询是错误的,因为您首先尝试获取所有数据,然后进行投影,最后进行查询。

所以,按照文档你需要这样的东西

db.collection.find({
  /* Query */
  "borough": {
    "$in": [
      "Bronx",
      "Queens"
    ]
  }
},
{
  /* Projection */
  "restaurant_id": 0,
  "_id": 0
})

另请注意,投影中仅可能指示要排除的值。默认情况下,会显示集合中的所有值,因此您不必包括在内。您只需要排除您不想检索的值。


推荐阅读