通过查询子子文档更新子文档

时间:2017-11-13 11:51:59

标签: node.js mongodb mongoose

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框架,触发器等,我不希望代码变慢。

0 个答案:

没有答案