Javascript MongoError:当我尝试将用户ID推入Node.js中的数组字段时,未知修饰符$pushAll
当我尝试将Javascript MongoError:当我尝试将用户ID推入Node.js中的数组字段时,未知修饰符$pushAll,javascript,node.js,mongodb,mongoose,mongodb-query,Javascript,Node.js,Mongodb,Mongoose,Mongodb Query,当我尝试将userId推送到一个likes字段数组时,我得到一个MongoError:Unknown修饰符$pushAl错误: 自版本2.4以来已被弃用: 自版本2.4以来已弃用:改为将$push运算符与$each一起使用 您可以/应该升级到与您正在使用的MongoDB版本一起使用的最新版本的Mongoose,或者将MongoDB降级到仍然支持$pushAll的较旧版本。我会建议前者 或者,如果您使用的是Mongoose版本
userId
推送到一个likes字段数组时,我得到一个MongoError:Unknown修饰符$pushAl
错误:
自版本2.4以来已被弃用:
自版本2.4以来已弃用:改为将$push运算符与$each一起使用
您可以/应该升级到与您正在使用的MongoDB版本一起使用的最新版本的Mongoose,或者将MongoDB降级到仍然支持$pushAll
的较旧版本。我会建议前者
或者,如果您使用的是Mongoose版本<5
,则可以在定义模式时使用usepuseheach:true
选项:
new mongoose.Schema({ ... }, {
usePushEach: true,
});
有关该问题的更多信息,请访问:
于2017年9月26日发表评论
这是一个问题,MongoDB3.5
是一个不稳定的开发版本,不应该使用$pushAll
已经被弃用很长一段时间了,所以他们可能在3.5
中放弃了它。你能澄清一下吗
我们添加了一个usePushEach
选项来解决这个问题,这应该是解决这个问题的一个方法:
new Schema({ arr: [String] }, { usePushEach: true });
对usePushEach
的支持被删除,因此在这种情况下,您可以使用,因此您的旧代码:
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卸载了mongoose
,然后npm I mongoose
安装了5.11.18版,这是撰写本文时的最新版本,问题得到了解决。
这对我来说是一个非常简单的解决方案,无需更改我的代码中的任何内容,它与上面所说的相同。您能提供您试图使用的代码吗?修复它!刚刚在schema中添加了{usePushEach:true},变得像新的mongoose.schema({props},{usePushEach:true});