Gyus,我做错了什么?
我的架构:
const Review = new mongoose.Schema(
{
text: String,
author:
{
name: String,
key:
{
type: mongoose.Schema.Types.ObjectId,
ref: 'users'
}
},
voting: [ String ]
})
mongoose.model('art', new mongoose.Schema(
{
...
name: String,
reviews: [ Review ],
...
}));
MongoDB Shell:
db.arts.findOneAndUpdate(
{
name: "something",
"reviews.author.key": "581234d3e278e132eb0af8f6"
},
{$addToSet: {"reviews.$.voting": "58123491c08ed174f1f4df74"}});
有什么期望。找到名为“something”的艺术品,然后找到作者xxx的子文档评论并返回子文档以使其更新。 顺便说一句,每个用户只能对每件艺术品进行一次评论,因此很安全。
但是nodejs中的等效代码返回空错误。通过实验,具有相同/相似参数的findOne()始终返回null。当然,数据存在 - shell返回它们。
Art.findOneAndUpdate(
{
name: "something",
"reviews.author.key":"581234d3e278e132eb0af8f6"
},
{$addToSet: {"reviews.$.voting": "58123491c08ed174f1f4df74"}},
{new: true});
感谢任何帮助,谢谢。
P.S。:请坚持使用Model.method()方式。由于Mongoose框架,触发器等,我不希望代码变慢。