MongoDB如何删除/清空另一个数组中的数组

3

我想知道如何删除/清空嵌套数组中的整个数组。

这是我的数据样式。我想知道如何清空数组"companyvote"。有什么建议吗?

{
"_id" : ObjectId("55529cbb056565e80d963fac"),
"email" : "test@test.be",
"img" : "\img\1920x12001431477435530.jpg",
"companyvote" : [ 
    "Lovely inc", 
    "Behond imagination"
],
"__v" : 0
}
3个回答

7
您可以使用$unset来移除属性,如下所示。
db.companies.update({ "_id" : ObjectId("55529cbb056565e80d963fac")},
    {$unset:{'companyvote':1}});

或者,如果你只想清空数组的内容,可以使用$set

db.companies.update({ "_id" : ObjectId("55529cbb056565e80d963fac")}, {$set:{'companyvote':[]}})

要删除所有记录的内容,您只需要通过Id删除过滤器。

db.companies.update({}, {$set:{'companyvote':[]}})

谢谢!但是这只删除了一个嵌套数组。我想要能够删除所有的嵌套数组。 - Sara Barrera Riano
你好Sara,要删除所有的数组,你需要移除筛选条件,请查看我的更新答案。 - Toan Nguyen
我尝试过,但即使使用了你更新后的代码,只有第一条记录被删除了。我找到了一种方法来删除所有嵌套的数组,不确定它是否是正确的方式,但它肯定有效!你可以在下面检查它。 - Sara Barrera Riano

1

您可以使用以下代码清空数组中一条记录的内容:

db.companies.update({ _id : ObjectId("55529cbb056565e80d963fac")}, {$set:{'companyvote':[]}});
or
db.companies.update({ "_id" : ObjectId("55529cbb056565e80d963fac")}, {$unset:{'companyvote':1}});

如果您想清除多个记录,请不要忘记添加选项。
db.companies.update({}, {$set:{'companyvote':[]}}, {multi: true});
or
db.companies.update({}, {$unset:{'companyvote':1}}, {multi: true});

0

这是对我真正有效的方法。

socket.on('deleteAllVotes', function() {
  Slides.find().exec(function(err, b) {
  for(var i = 0; i < b.length; i++) {
      var allslides = b[i].companyvote;
      Slides.update({companyvote:allslides}, {$set:{'companyvote':[]}},function(err, b) {});
    }
  });
   socket.emit('deleteAllVotes');
}); 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接