mongodb:仅当某个字段不存在时才将项插入数组
我有一个这样的数据模型mongodb:仅当某个字段不存在时才将项插入数组,mongodb,Mongodb,我有一个这样的数据模型 { _id: 1 some_property: some_value items: [ { item_id: item1 item_properties: [ { key1: val1, key2: val2 }] }] } 当我获得一个具有item\u id=itemX的新项时,我想检查具有此item\u id的项是否
{
_id: 1
some_property: some_value
items: [
{
item_id: item1
item_properties: [
{
key1: val1,
key2: val2
}]
}]
}
当我获得一个具有item\u id=itemX
的新项时,我想检查具有此item\u id的项是否在items数组中。如果它不存在,则插入它。如果存在,我想将item_属性附加到现有item_属性
我尝试使用$addToSet
,但这会考虑整个项目,而不是项目id本身。因此,结果是两个项目具有相同的项目id
你知道我怎样才能在原子上做到这一点吗
谢谢,
我认为,以下代码可以原子化运行
function doWhenItemExisted() {
var n = db.c.update({
"items.item_id" : itemX
}, {
$pushAll: { // I think item_properties of given item is also an array
"items.$.item_properties" : item.item_properties
}
}).nModified;
if (!n) {
doWhenItemNotExisted();
}
}
function doWhenItemNotExisted() {
var n = db.c.update({
"items.item_id" : {
$ne : itemX
}
}, {
$push: {
"items" : item
}
}).nModified;
if (!n) {
doWhenItemExisted();
}
}
// entry
doWhenItemExisted();