mongoose更新到一个数组

时间:2015-05-10 18:30:34

标签: node.js mongodb mongoose

我有这个架构

var ArticleSchema = new Schema({
user_id: { type: Schema.ObjectId, ref: "User"},
title: String,
description: String,
content: String,
visible: Boolean,
saved: Boolean,
deleted: {type: Boolean, default: false },
permalink: String,
created_at: { type: Date, default: Date.now },
edited_at: { type: Date, default: Date.now },
tags : [],
comments: {
    comment: String,
    name: String,
    email: String,
    date: Date,
    deleted: Boolean,

}

});

我想将删除的字段更新为特定数组的comments数组。

我正是这样做的。

    this.model.update(
{
    _id: data.articleId
},
{
    $set: { 'comments.$.deleted' : true }
},
function(err, doc){
    console.info(doc);
    console.info(err);
    callback(doc);
});

};

没有任何反应,我直接尝试在mongo控制台上运行。

但不是在猫鼬中。出于任何原因,我得到了console.info(),null和0作为结果。该文档永远不会更新。

如果我尝试更新其他值而不是嵌套,则可以正常工作。

1 个答案:

答案 0 :(得分:3)

您可以尝试以下方法:

this.model.update(
    {
        _id: data.articleId
    },
    {
        $set: { 'comments.deleted' : true }
    },
    function(err, doc){
        console.info(doc);
        console.info(err);
        callback(doc);
    });
};

您的代码无效,因为comments字段不是数组而是嵌入的子文档,$ positional operator仅标识要更新的数组中的元素,而不显式指定元素在数组中的位置。