我很难用mongoose/mongodb替换字段
我有一些文件看起来像这样:
{account:1234, myArray:[a,b,c]}
const newArray = [d,e,f];
const result = await Model.updateMany({
account:1234,
}, {
$set:{
// 'testUpdating':4,
'myArray':newArray,
}
});
我得到了这个结果:
{
"ok": 0,
"n": 0,
"nModified": 0
}
但是,如果我取消注解testUpdating:4
更新,我会得到更新了18 k文档的预期结果,但是只有'testUpdating'字段被修改。
我要么做错了什么,要么它只是拒绝用新数组更新数组字段。
3条答案
按热度按时间lpwwtiir1#
你的
Model.updateMany()
看起来很好,应该用你想要的结果更新所有匹配的文档。这可能是一个模式定义问题。
请确保使用实际需要的类型数组定义
myArray
属性,并将这些数据类型传递给updateMany
。例如,如果你的myArray
是一个字符串数组,那么你的schema看起来会像这样:然后,当你执行
updateMany
时,确保你传入一个字符串数组,如下所示:如果你想存储一个不同类型的数组(而不是字符串),那么看看文档中的一个可用选项的例子。
qpgpyjmq2#
update()
示例正在运行:upsert : true
表示如果未找到记录则将创建记录。upsert : false
表示如果未找到记录,则不会创建记录。简单来说就是
insert + update = upsert
multi:true
更新多个文档,而multi:false
更新单个文档。数据:
更新聚合:
输出:
o4tp2gmn3#
原来是一个同事重写了updateMany函数,这就解释了为什么会这么奇怪。