0

我已经看到了我要问的问题的多个实例,但似乎没有一个可以解决我的问题。

我有一组带有架构的文档:

{
 _id:someId,
 brands:[
 {_id:1,name:Nike,products:[]},
 {_id:2,name:Reebok,products:[]}     
 ]
}

如果任何数组元素匹配,我想要做的是更新数组字段,否则在brands数组中插入一个新对象。

到目前为止,我遇到了这个:

  var args = {
      'query': {_id:someId,"brands._id":someBrandId,}
    , 'update': {
      "$set": {
        'brands.$.products':req.tempStore.products
      }
    },
    , 'upsert':true
  };

然后我使用 nodejs 驱动程序并使用以下内容:

db.companies.findAndModify(args,function(err,document){
 if(err) return next(err);
 //some other logic here

})

在执行上述操作时,如果它发现对象存在于brands数组中,它会成功更新它,但如果不存在,则会给出以下错误:

如果没有包含数组的相应查询字段,则无法应用位置运算符

如果数组字段不存在,我不知道如何在数组字段中添加新值。

4

0 回答 0