当我尝试将userId推送到Node.js中的Array字段时,MongoError:未知的修饰符$ pushAll

时间:2018-05-21 18:59:39

标签: javascript node.js mongodb mongoose mongodb-query

当我尝试将MongoError: Unknown modifier $pushAl推送到喜欢的数组字段时,我收到userId错误:

MongoDB push error

3 个答案:

答案 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 版,这是撰写本文时的最新版本,问题得到了解决。 这对我来说是一个非常简单的解决方案,无需更改我的代码中的任何内容,它加起来就是上面所说的。