使用 $in 和 $addtoSet Mongodb 更新数组
Update Array using $in and $addtoSet Mongodb
我正在使用 $in
和 $addToSet
来更新我的 collections 中的数组。假设我有这种文件。
{
_id: objectId(1), //this is just an example id
names: ['harry', 'hermione']
},
{
_id: objectId(2),
names: ['ron']
},
{
_id: objectId(3),
names: ['dumbledoor']
}
我想更新所有这些文档,所以我有一个 ID 数组
var arr_ids = [1, 2];
并像这样使用数组 map
。
var ids = arr_ids.map(function(id) { return mongoose.Types.ObjectId(id); });
更新我 collections 中的所有文档。
db.update( { _id: { $in: ids } }, { $addToSet: { name : 'draco' } },
function(err, results) {
if(err) console.log(err);
console.log(results);
}
);
我使用 $in
和 $addToSet
,它可以工作并更新文档,但它只更新最后一个文档。
{
_id: objectId(1), //this is just an example id
names: ['harry', 'hermione']
},
{
_id: objectId(2),
names: ['ron', 'draco'] // it only update this document.
},
{
_id: objectId(3),
names: ['dumbledoor']
}
我不知道为什么。我不想创建一个 for 循环只是为了单独更新它,但在我看来这是我最后的选择。请帮帮我。谢谢!
像这样 multi: true
试试
db.update( /*query*/, { $addToSet: { names : 'draco' } }, {multi: true} ...
有关它的文档,请参阅 multi-parameter and this example
我正在使用 $in
和 $addToSet
来更新我的 collections 中的数组。假设我有这种文件。
{
_id: objectId(1), //this is just an example id
names: ['harry', 'hermione']
},
{
_id: objectId(2),
names: ['ron']
},
{
_id: objectId(3),
names: ['dumbledoor']
}
我想更新所有这些文档,所以我有一个 ID 数组
var arr_ids = [1, 2];
并像这样使用数组 map
。
var ids = arr_ids.map(function(id) { return mongoose.Types.ObjectId(id); });
更新我 collections 中的所有文档。
db.update( { _id: { $in: ids } }, { $addToSet: { name : 'draco' } },
function(err, results) {
if(err) console.log(err);
console.log(results);
}
);
我使用 $in
和 $addToSet
,它可以工作并更新文档,但它只更新最后一个文档。
{
_id: objectId(1), //this is just an example id
names: ['harry', 'hermione']
},
{
_id: objectId(2),
names: ['ron', 'draco'] // it only update this document.
},
{
_id: objectId(3),
names: ['dumbledoor']
}
我不知道为什么。我不想创建一个 for 循环只是为了单独更新它,但在我看来这是我最后的选择。请帮帮我。谢谢!
像这样 multi: true
试试
db.update( /*query*/, { $addToSet: { names : 'draco' } }, {multi: true} ...
有关它的文档,请参阅 multi-parameter and this example