我有这个架构
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作为结果。该文档永远不会更新。
如果我尝试更新其他值而不是嵌套,则可以正常工作。
答案 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仅标识要更新的数组中的元素,而不显式指定元素在数组中的位置。