在$ pull(数组更新运算符)中使用$或(逻辑查询运算符)在mongoose中不起作用

时间:2014-02-19 13:00:10

标签: mongodb mongoose

使用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 }

0 个答案:

没有答案