Mongodb MongoError:无法识别的管道阶段名称:'$添加字段';
MongoError:无法识别的管道阶段名称:“$addFields”。 “猫鼬”:“^4.5.8” 我的源代码:Mongodb MongoError:无法识别的管道阶段名称:'$添加字段';,mongodb,aggregation-framework,Mongodb,Aggregation Framework,MongoError:无法识别的管道阶段名称:“$addFields”。 “猫鼬”:“^4.5.8” 我的源代码: Post.aggregate( [{ $addFields: { userName: { $concat: [ "$author.firstName", " ", "$author.lastName" ] }
Post.aggregate(
[{
$addFields: {
userName: { $concat: [ "$author.firstName", " ", "$author.lastName" ] }
}
//$project: { userName: { $concat: [ "$author.firstName", " ", "$author.lastName" ] } } //this is ok!
}],
function (err, result) {
if (err) {
console.log(err);
return;
}
console.log(result);
}
)
后模型:
let schema = {
id: "post",
properties: {
content: {type: "string"},
author: {
type: "object",
id: {type: "string"},
avatar: {type: "string"},
firstName: {type: "string"},
lastName: {type: "string"},
status: {type: "string"}
},
category: {
type: "object",
id: {type: "string"},
name: {type: "string"}
},
images: {
type: "array",
items: {
type: "object",
properties: {
filePath: {type: "string"},
}
}
},
video: {
type: "object",
thumbnail: {type: "string"},
filePath: {type: "string"}
},
likes: {
type: "array",
items: {
type: "object",
properties: {
userId: {type: "string"},
status: {type: "string"},
_id : {type: "string", default: null}
}
}
},
shares: {
type: "array",
items: {
type: "object",
properties: {
userId: {type: "string"},
status: {type: "string"},
destination: {type: "string"}, //FACEBOOK|TWISTER|GOOGLE
_id : {type: "string", default: null}
}
}
},
favorites: {
type: "array",
items: {
type: "object",
properties: {
userId: {type: "string"},
status: {type: "string"},
_id : {type: "string", default: null}
}
}
},
comments: {
type: "array",
items: {
type: "object",
properties: {
commentId: {type: "string"},
_deleted: {type: "Date", default: ''},
_id : {type: "string", default: null}
}
}
},
_created: {type: "Date", default: Date.now},
_deleted: {type: "Date", default: ''},
_updated: {type: "Date", default: ''}
}
在Mongo3.4版本中引入。正如您所评论的,您正在使用mongo 3.2.9,所提到的查询将不起作用
如果由于某种原因无法更新mongo版本,则必须使用以下方法,其中需要迭代每个文档并设置新字段
Post.find({}).forEach(function(post){
post.findOneAndUpdate({_id: post._id},
{$set: {userName: post.author.firstName + " " + post.author.lastName }})
});
mongodb上的版本是什么
$addFields
在3.4mongodb的版本是^4.5.8,在packge.json中:“mongoose”:“^4.5.8”,“mongoose json select”:“^0.2.1”,“mongoose unique validator”:“^1.0.2”,使用我检查过的问题的答案检查版本,mongodb的版本是3.2.9。非常感谢。修改原始文档是一个糟糕的解决方法。OP问题中注释掉的$project
是正确的解决方法。非常感谢!我更新了mongo版本并解决了我的问题problem@JohnnyHK你能解释一下为什么$project解决方案是正确的吗?我正在寻找这个问题的答案: