У меня есть mongo-документ, подобный этому.
{
"_id" : ObjectId("50b429ba0e27b508d854483e"),
"array" : [
{
"id" : "1",
"letter" : "a"
},
{
"id" : "2",
"letter" : "b"
}
],
"tester" : "tom"
}
Я хочу иметь возможность вставлять и обновлять array
с помощью одной команды mongo и не использовать условное выражение в find()
, а затем запускать insert()
и update()
в зависимости от наличия объекта.
id
- это элемент, который я хочу быть селектором. Поэтому, если я обновляю массив следующим образом:
{
"id" : "2",
"letter" : "c"
}
Мне нужно использовать оператор $set
db.soup.update({
"tester":"tom",
'array.id': '2'
}, {
$set: {
'array.$.letter': 'c'
}
})
И если я хочу вставить новый объект в массив
{
"id" : "3",
"letter" : "d"
}
Мне нужно использовать оператор $push
db.soup.update({
"tester":"tom"
}, {
$push: {
'array': {
"id": "3",
"letter": "d"
}
}
})
Мне нужен вид upsert для элемента массива.
Должен ли я делать это программно или я могу сделать это с помощью одного вызова манго?