【发布时间】:2020-11-27 12:02:01
【问题描述】:
我只是浏览有关 mongodb 的文档并尝试使用聚合,当我的查询包含 { $project: { aw_product_id: 1, _id: 0} } 部分时出现错误,$project 部分一切看起来正确,列 aw_product_id 出现在我的模型中,我尝试更改为另一列,但仍然面临同样的错误。我做错了什么?
db.version() -> 4.4.0
db.getCollection('AwinProduct').aggregate(
[
{ $match: { $text: { $search: "Sko Nike Classic Cortez för män -Svart", $language: 'sv' } } },
{ $sort: { score: { $meta: "textScore" } } },
{ $project: { aw_product_id: 1, _id: 0} }
]
)
面对这个问题
无法执行脚本。
Error: command failed: {
"ok" : 0,
"errmsg" : "FieldPath field names may not start with '$'.",
"code" : 16410,
"codeName" : "Location16410"
} : aggregate failed
Details:
_getErrorWithCode@src/mongo/shell/utils.js:25:13
doassert@src/mongo/shell/assert.js:18:14
_assertCommandWorked@src/mongo/shell/assert.js:534:17
assert.commandWorked@src/mongo/shell/assert.js:618:16
DB.prototype._runAggregate@src/mongo/shell/db.js:260:9
DBCollection.prototype.aggregate@src/mongo/shell/collection.js:1062:12
DBCollection.prototype.aggregate@:1:355
@(shell):1:1
我对另一个收藏和新收藏做了同样的事情,但遇到了同样的错误
我尝试对字段使用 qoutes 但仍然是同样的错误
db.getCollection('AwinProduct').aggregate(
[
{ $match: { $text: { $search: "Sko Nike Classic Cortez för män -Svart", $language: 'sv' } } },
{ $sort: { score: { $meta: "textScore" } } },
{ $project: { "currency": 1, _id: 0} }
]
)
我在 docker 结构中使用 mongo,这是我为这个 img 编写的 docker-compose
mongodb:
image: mongo:latest
container_name: mongodb
hostname: mongodb
volumes:
- ./docker/mongodb/mongod.conf:/etc/mongod.conf
- ./docker/mongodb/initdb.d/:/docker-entrypoint-initdb.d/
- ./data/momgo/:/data/db/
- ./docker/mongodb/data/log/:/var/log/mongodb/
- ./docker/mongodb/home:/home/mongodb
env_file:
- .env
environment:
MONGO_INITDB_ROOT_USERNAME: ${MONGO_INITDB_ROOT_USERNAME}
MONGO_INITDB_ROOT_PASSWORD: ${MONGO_INITDB_ROOT_PASSWORD}
MONGO_INITDB_DATABASE: ${MONGO_INITDB_DATABASE}
ports:
- "27017:27017"
command: ["-f", "/etc/mongod.conf"]
networks:
- php
【问题讨论】:
-
尝试用引号将
aw_product_id括起来。一个猜想。查询对我来说看起来不错。 -
@Gibbs 双引号和单引号无济于事 :( 一些魔法......
标签: mongodb aggregation-framework