我有一个带有“messages”数组字段的文档集合:
{
"id": 2,
"messages": [
{
"id": 1,
"text": "foo"
},
{
"id": 2,
"text": "bar"
}
]
}
Run Code Online (Sandbox Code Playgroud)
我想更新文档:仅当“消息”不包含具有此类 id 的文档时,才将新的“消息”文档添加到“消息”字段。例如:
{
"id": 2,
"text": "bllllllll"
}
Run Code Online (Sandbox Code Playgroud)
不应该添加
{
"id": 3,
"text": "foo"
}
Run Code Online (Sandbox Code Playgroud)
应该添加
我怎样才能进行条件附加?我知道我可以通过 $elemMatch 运算符过滤 Find 部分中的文档,但它仅适用于 Update,而使用 Upsert 则不再适用。
要根据条件将数据推送到数组中,您必须在查询中使用 $ne 。
var data = {
"id": 3.0,
"text": "bllllllll"
}
Run Code Online (Sandbox Code Playgroud)
假设如果 id 不在该数组中,您想要将数据更新到数组中。
db.getCollection('local').update({
_id: ObjectId("591d6d2091b1fda9dcb6ef69"),
"messages.id":{$ne: data.id}
},{$push:{messages: data}})
Run Code Online (Sandbox Code Playgroud)
$ne 匹配如果 data.id 存在于数组中则忽略更新,否则将数据推送到数组中。
| 归档时间: |
|
| 查看次数: |
4810 次 |
| 最近记录: |