我想更新一个数组值,但我不确定正确的方法,所以我尝试了下面的方法,但对我没有用。
我的模特, 我的模型中的儿童字段
childrens: {
type: Array,
default: ''
}
我的查询,
Employeehierarchy.update({ _id: employeeparent._id} ,{ $set: {"$push": { "childrens": employee._id }} })
.exec(function (err, managerparent) {});
任何人都可以请我帮忙。谢谢。
答案 0 :(得分:17)
您不能在与嵌套运算符相同的更新表达式中同时使用 $set
和 $push
。
使用update operators的正确语法如下:
{
<operator1>: { <field1>: <value1>, ... },
<operator2>: { <field2>: <value2>, ... },
...
}
其中<operator1>, <operator2>
可以来自指定here的任何更新运算符列表。
要向阵列添加新元素,只需一个 $push
运算符就足够了您可以使用 findByIdAndUpdate
更新方法将修改后的文档作为
Employeehierarchy.findByIdAndUpdate(employeeparent._id,
{ "$push": { "childrens": employee._id } },
{ "new": true, "upsert": true },
function (err, managerparent) {
if (err) throw err;
console.log(managerparent);
}
);
使用原始 update()
方法,语法为
Employeehierarchy.update(
{ "_id": employeeparent._id},
{ "$push": { "childrens": employee._id } },
function (err, raw) {
if (err) return handleError(err);
console.log('The raw response from Mongo was ', raw);
}
);
其中回调函数接收参数(err, raw)
其中
err
是错误(如果发生)raw
是Mongo的完整回复由于您要查看已修改的文档,我建议您使用 findByIdAndUpdate
函数,因为 update()
方法不会给你修改过的文件,只是mongo的完整写入结果。
如果要更新文档中的字段并同时向数组添加元素,则可以执行
Employeehierarchy.findByIdAndUpdate(employeeparent._id,
{
"$set": { "name": "foo" },
"$push": { "childrens": employee._id }
}
{ "new": true, "upsert": true },
function (err, managerparent) {
if (err) throw err;
console.log(managerparent);
}
);
以上内容会将name
字段更新为“foo”,并将员工ID添加到childrens
数组中。
答案 1 :(得分:2)
可以遵循此
如果childrens
包含字符串值,那么模型可以是:
childrens: [{
type : String
}]
如果childrens
包含另一个集合_id
的ObjectId值,并且想要填充,那么模型可以是:
childrens: [{
type : mongoose.Schema.Types.ObjectId,
ref: 'refModelName'
}]
无需使用$set
只需使用$push
在childrens
数组中插入值即可。所以查询可以像:
Employeehierarchy.update(
{ _id: employeeparent._id},
{"$push": { "childrens": employee._id } }
).exec(function (err, managerparent) {
//
});
答案 2 :(得分:0)
这会帮助我猜
Employeehierarchy.findOneAndUpdate(
{ _id:employeeparent._id },
{ $set: { "childrens": employee._id }}
)