我有一个MongoDB文档:
{
"_id" : 1,
title: "abc123",
isbn: "0001122223334",
author: { last: "zzz", first: "aaa" },
copies: 5
}使用$project (聚合操作符),我必须重新构造以前的模式才能获得:
{
"_id" : 1,
field: {key:"title", value:"abc123"},
isbn: "0001122223334",
author: { last: "zzz", first: "aaa" },
copies: 5
}为了达到我的目标,我使用了以下聚合:
db.book.aggregate([{$project: {"field": {"key":"title", "value":"$title"}}}])但我有个错误:
{
"ok" : 0,
"errmsg" : "FieldPath 'isbn' doesn't start with $",
"code" : 16873
} : aggregate failed我不明白为什么这个聚合不起作用,因为如果我想要重新构建以前的模式以获得:
{
"_id" : 1,
"author" : {
"last" : "zzz",
"first" : "aaa"
},
"copies" : 5,
"fieldTitle" : {
"key" : "abc123"
}
}我可以使用这个聚合(而且它可以工作):
db.book.aggregate([{$project: {_id:1, fieldTitle:{key:"$title"}, author:1, copies:1}}])发布于 2016-02-29 15:08:56
使用$literal运算符不需要解析就返回值。它用于聚合管道可能将其解释为表达式的值,如您当前获得的错误:
db.book.aggregate([
{
$project: {
"field.key": { "$literal": "title" },
"field.value": "$title",
"author": 1, "copies": 1
}
}
])样本输出
{
"result" : [
{
"_id" : 1,
"author" : {
"last" : "zzz",
"first" : "aaa"
},
"copies" : 5,
"field" : {
"key" : "title",
"value" : "abc123"
}
}
],
"ok" : 1
}https://stackoverflow.com/questions/35702744
复制相似问题