我正在调试为什么我的架构的数组字段只是在增加大小,尽管明确地将它们的长度设置为0或 = []; 。
事实证明,当Mongoose向MongoDB发送请求时,某些部分请求的后缀为 $ set ,而其他部分请求 $ pushAll ,尽管有一些 $ set ting值也是数组。
Mongoose如何选择要指定的后缀?如何强制它对所有更新字段使用 $ set ?
答案 0 :(得分:1)
根据您的猫鼬版本,array.push()
依赖$pushAll ,所以......
如何强制它对所有更新字段使用 $ set ?
array.push(whatever); //uses $pushAll
改为使用:
array = array.concat([whatever]); //uses $set
修改强>
您应该在撰写本文时更新到最新版本(4.11.5
)
您可以看到@ mongoose/array.js
MongooseArray#push
会将数组标记为已修改。 在MongooseArray Constructor
中,您可以看到使用concat
完成以避免#push
标记:
function MongooseArray(values, path, doc) {
var arr = [].concat(values);