Mongodb 如何在upsert时添加到阵列

Mongodb 如何在upsert时添加到阵列,mongodb,Mongodb,我相信我有一个“upsert”的经典案例,但需要更新部分的帮助。我有文本块,每个db记录一个。我还有一个潜在的不断增长的属性列表,它与每个文本块一起出现——因此这就是插入的位置。我想要一些像: { attr: ['red'], text: 'hello there' } 下一步,它必须成为: { attr: ['red', 'green'], text: 'hello there' } 因此,如果找不到记录,请插入它。如果找到该记录,则使用一个附加属性来增

我相信我有一个“upsert”的经典案例,但需要更新部分的帮助。我有文本块,每个db记录一个。我还有一个潜在的不断增长的属性列表,它与每个文本块一起出现——因此这就是插入的位置。我想要一些像:

{
     attr: ['red'],
     text: 'hello there'
}
下一步,它必须成为:

{
    attr: ['red', 'green'],
    text: 'hello there'
}

因此,如果找不到记录,请插入它。如果找到该记录,则使用一个附加属性来增加属性数组。谢谢

您可以尝试以下查询:

db.test.update( {},
{
    $addToSet : {attr : "newColor"}
}
);
$addToSet在新值不存在时添加该值。如果它存在,什么也不会发生:D 希望它能解决问题

你可以试试这个

db.test.update(
  { "attr": { "$ne": "newColor" }},
  { "$addToSet": { "attr": "newColor" }},
  { "upsert": true }
)

您必须使用
$addToSet
而不是upsert@AnthonyWinzlet如果我理解正确,$addToSet将是update()命令的一部分?最初,该记录不存在——因此update()插入该记录,$addToSet是该记录的一部分。正确吗?
$addToSet
更新数组。。。如果数组中不存在值,它会插入它谢谢您,但不是安静。那么文档的文本字段发生了什么变化?因此,如果整个文档不在那里(包括文本字段),则会插入它。但是,如果文档确实存在,则只会追加attr数组。因此,即使整个文档不存在,也要同时添加“attr”字段和“text”字段吗?是否要使用某些条件来筛选更新?