我已经看到了我要问的问题的多个实例,但似乎没有一个可以解决我的问题。
我有一组带有架构的文档:
{
_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数组中,它会成功更新它,但如果不存在,则会给出以下错误:
如果没有包含数组的相应查询字段,则无法应用位置运算符
如果数组字段不存在,我不知道如何在数组字段中添加新值。