database - 为什么我的 $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)
解决方案
根据文档,find
只允许两个参数:查询和投影。
文档说:
- 查询:使用查询运算符指定选择过滤器。
- 投影:指定要在与查询过滤器匹配的文档中返回的字段。
但你的查询是这样的:
find({/*empty object*/}, {projection}, {query} )
使用 en 空对象作为查询是获取所有数据,就像SELECT *
在 SQL 中一样。因此,您的查询是错误的,因为您首先尝试获取所有数据,然后进行投影,最后进行查询。
所以,按照文档你需要这样的东西:
db.collection.find({
/* Query */
"borough": {
"$in": [
"Bronx",
"Queens"
]
}
},
{
/* Projection */
"restaurant_id": 0,
"_id": 0
})
另请注意,投影中仅可能指示要排除的值。默认情况下,会显示集合中的所有值,因此您不必包括在内。您只需要排除您不想检索的值。
推荐阅读
- excel - 在查询中追踪数据格式错误的来源
- python - 在 Django 中删除帖子
- python - 图像上像素(X,Y)的颜色强度 [OpenCV / Python]
- java - 聊天机器人与 java 代码交互 beetwen jenkins 和 Mattermost
- hashicorp-vault - Vault 的密钥撤销是否会影响被撤销密钥在使用它的服务中的有效性?
- javafx-8 - 如何使用 Google Play 开发者控制台轻松测试计费应用程序?
- php - PHP 简短的 if 语句,带有 continue 关键字并省略 else 部分
- python - 如何根据附加文档的标题自动填写表单域?
- jstl - 如何使用 JSTL 和 EL 获取动态表单字段名称的值
- python - Python中的NoneType-Error与yield