使用mongoose在MongoDB上执行以下操作:
model.findOneAndUpdate(
{ name: 'test' },
{
'$set': { name: 'test2' },
'$pull': { some_array: { '$or': [ { name: 2 }, { name: 3 } ] } }
},
function(err, c) { ... }
)
在mongoose调试日志中显示以下结果:
Mongoose: examples.findAndModify(
{ name: 'test' }) [] {
'$pull': { some_array: {} }, '$set': { name: 'test2' }
}
{ upsert: false, new: true }
some_array:{} - 为空,没有$或逻辑运算符。此调用导致完全删除some_array数组,这是一个明显的错误。
应该支持这样的语法,因为在mongo shell中它可以使用call:
正常工作db.examples.findAndModify(
{query:
{ name: 'test' },
update:
{
'$pull': { some_array: { '$or': [ { name: 2 }, { name: 3 } ] } },
'$set': { name: 'test2' }
}}
)
这是猫鼬驱动程序中的一个明显错误吗?如果是,是否有人知道此问题的相应票证,或者应该报告?
mongoose语法可能有问题吗?
编辑:
我也检查过没有$ set part的电话:
model.findOneAndUpdate(
{ name: 'test' },
{ '$set': { name: 'test2' },
'$pull': { some_array: { '$or': [ { name: 2, name: 3 } ] } }
},
function(err, c) {...}
);
它也错误地匹配:
Mongoose: examples.findOne({ name: 'test' }) { fields: undefined }