如何使用$ not和$ elemMatch使用羽毛猫鼬查询更新

时间:2018-10-01 15:44:04

标签: node.js mongodb mongoose feathersjs

我正尝试通过服务器端使用feathersjs方法更新来更新我的文档,如下所示:

context.app.service('myDocumens').update({
  _id: obj._id,
  'data': {
    "$not": {
      "$elemMatch": {
        'year': 2018
      }
    }
  }
}, {
  $addToSet: {
    'data': {
      'position': 'senior',
      'group': 1,
      'comment': "",
      'year': 2018
    }
  }
}).then(result => {    
  console.log(result)    
});}

我在下面的示例文档中显示:

{
  "_id": ObjectId("...."),
  "firstName": "Adam",
  "lastName": "Brown",
  "data": [
     { "position":"senior","group":1,"comment":"","year":2018 },
     { "position":"junior","group":0,"comment":"","year":2017 }
  ]
}

使用上面的查询,我尝试将新对象添加到数组中,其中包含字段'year':2018(如果此数组中不存在该字段,但是在运行此查询到数组后的所有时间都添加新对象,尽管该数组已经包含一个字段为'year'的对象:2018。怎么了?

当我在mongoDb shell中运行以上查询时,它工作正常。

1 个答案:

答案 0 :(得分:0)

我注意到的主要事情是您错误地使用了feathersjs adapter.update API。对文档ID的引用应在对象之外。尝试切换到此签名:

context.app.service('myDocumens').update(id, data, params);

有关更多信息,请参见API文档。 https://docs.feathersjs.com/api/databases/common.html#adapterupdateid-data-params