当我尝试将MongoError: Unknown modifier $pushAl推送到点赞数组时出现userId错误:

javascript - MongoError:当我尝试将userId插入Node.js中的Array字段时,未知修饰符$ pushAll-LMLPHP

最佳答案

从版本$pushAll开始不推荐使用2.4


  从版本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 });



Mongoose version usePushEach上放弃了对>= 5的支持,因此在这种情况下,您可以改用Array.prototype.concat(),因此您的旧代码为:

selectedHotel.likes.push(userId);


会变成:

selectedHotel.likes = selectedHotel.likes.concat([userId]);


请注意,我将concat返回的值分配回selectedHotel.likes,因为concat不会使原始Array发生变异。

关于javascript - MongoError:当我尝试将userId插入Node.js中的Array字段时,未知修饰符$ pushAll,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50455054/

10-09 21:46