答案 0 :(得分:1)
2.4
以来, $pushAll
已被弃用:
从版本2.4开始不推荐使用:$ push运算符使用$ each代替。
您可以/应该使用您正在使用的MongoDB版本升级到compatible的更新版本的Mongoose,或者将MongoDB降级为仍支持$pushAll
的旧版本。我会建议前者。
或者,如果您使用的是Mongoose版本usePushEach: true
,则可以在定义架构时使用< 5
选项:
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 });
usePushEach
上已删除对selectedHotel.likes.push(userId);
的支持,因此,在这种情况下,您可以使用Mongoose version >= 5
代替您的旧代码:
selectedHotel.likes = selectedHotel.likes.concat([userId]);
会变成:
concat
请注意,我将selectedHotel.likes
返回的值分配回concat
,因为 func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
return string.rangeOfCharacter(from: CharacterSet(charactersIn: "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ")) == nil
}
不会改变原始数组。
答案 1 :(得分:0)
尝试
selectedHotel._doc.likes.push({//anything})
或 这个 我的旧代码,
myArray.push(id); //breaks on DocumentDB with Mongo API because of $pushAll
已替换为
myArray = myArray.concat([id]);
答案 2 :(得分:0)
我只是通过更新到最新版本的猫鼬来解决这个问题。我在使用 4.6 版时遇到了同样的问题,我做了 npm uninstall mongoose
,然后 npm i mongoose
安装了 5.11.18 版,这是撰写本文时的最新版本,问题得到了解决。
这对我来说是一个非常简单的解决方案,无需更改我的代码中的任何内容,它加起来就是上面所说的。