子句是項目MajorFood中的數組。如果它們不存在,我想添加子句,如果它們存在,則更新它們。Mongodb:如果值不存在,如何爲數組添加值,但如果存在則更新值
我試着用addToSet更新方法。這適用於普通元素,但對陣列失敗。
MajorFood.update({'_id' : majorFoodId, 'subdishes.food' : rowVals[0]},
{$addToSet : {subdishes : {
food : rowVals[0],
energy : {
calories : s.getIntVal(rowVals[1]),
unit : rowVals[2]
}
}}}, {upsert : true}, function(err, doc){
if(err){
s.l("err update");
callback(err);
return;
}
s.l("success");
callback();
});
當食物的價值已經存在於子句中時,更新正常工作。但是當元素必須添加到數組時,它會崩潰。
我收到以下錯誤:
MongoError: Cannot apply $addToSet to a non-array field.
Field named 'subdishes' has a non-array type Object
是否有一個函數來做到這一點的方法?
你看過錯誤信息嗎?你的集合中有一些文檔,其中'subdishes'不像你期望的那樣是一個數組。 –
您可以使用$ cond操作符來檢查字段是否存在(使用$ exists)或它的類型(使用$ type),然後使用$ addToSet或不使用 – felix
@felix,'subdishes:{$ type:'object'}'將解析在這兩種情況下都爲true,當'subdishes'是一個對象並且它是一個對象數組時:https://docs.mongodb.com/manual/reference/operator/query/type/#arrays –