【发布时间】:2018-10-31 11:26:23
【问题描述】:
【问题讨论】:
-
您能提供您尝试使用的代码吗?
-
修复它!刚刚在架构中添加了 {usePushEach:true} 并喜欢新的 mongoose.Schema({props}, {usePushEach: true});
标签: javascript node.js mongodb mongoose mongodb-query
【问题讨论】:
标签: javascript node.js mongodb mongoose mongodb-query
$pushAll 自版本 2.4 起已被弃用:
自 2.4 版起已弃用:将 $push 运算符与 $each 一起使用。
您可以/应该使用您正在使用的 MongoDB 版本升级到 compatible 的更新版 Mongoose,或者将 MongoDB 降级到仍然支持 $pushAll 的旧版本。我会建议前者。
或者,如果您使用的是 Mongoose 版本 < 5,则可以在定义架构时使用 usePushEach: true 选项:
new mongoose.Schema({ ... }, {
usePushEach: true,
});
您可以在GitHub 上阅读有关该问题的更多信息:
vkarpov15 于 2017 年 9 月 26 日发表评论
这是一个问题,MongoDB
3.5是一个不稳定的开发版本,不应该使用。$pushAll已被弃用很长时间,所以也许他们在3.5中摆脱了它。 @mbroadst你能澄清一下吗?我们添加了一个
usePushEach选项来解决这个问题:#4455,这应该是解决这个问题的方法:new Schema({ arr: [String] }, { usePushEach: true });
Mongoose version >= 5 已放弃对 usePushEach 的支持,因此在这种情况下,您可以改用 Array.prototype.concat(),因此您的旧代码:
selectedHotel.likes.push(userId);
会变成:
selectedHotel.likes = selectedHotel.likes.concat([userId]);
请注意,我将concat 返回的值分配回selectedHotel.likes,因为concat 不会改变原始数组。
【讨论】:
试试这个
selectedHotel._doc.likes.push({//anything})
或 这 我的旧代码,
myArray.push(id); //breaks on DocumentDB with Mongo API because of $pushAll
已被替换为,
myArray = myArray.concat([id]);
【讨论】:
我通过更新到最新版本的 mongoose 解决了这个问题。我在使用 4.6 版时遇到了同样的问题,我做了npm uninstall mongoose,然后是npm i mongoose,它安装了 5.11.18 版,这是撰写本文时的最新版本,问题得到了解决。
这对我来说是一个非常简单的解决方案,无需更改我的代码中的任何内容,它加起来就是上面所说的。
【讨论】: