我在同一个集合中有很多文档,如下所示:
{
"_id": ObjectId("4d525ab2924f0000000022ad"),
"array": [
{ id: 1, other: 23 },
{ id: 1, other: 21 },
{ id: 0, other: 235 },
{ id: 1, other: 765 }
],
"zeroes": []
}
我希望它们看起来像这样:
{
"_id": ObjectId("4d525ab2924f0000000022ad"),
"array": [
{ id: 1, other: 23 },
{ id: 1, other: 21 },
{ id: 1, other: 765 }
],
"zeroes": [
{ id: 0, other: 235 }
]
}
基本上,我希望能够在数组中提取一些元素,并将其推送到另一个数组。我知道我可以使用$pull
有条件地从数组中删除元素,但是可以重新定位这些拉取的元素吗?
答案 0 :(得分:1)
不是真的。您可以使用光标进行此操作。
db.foo.find({}).forEach(function(doc) {
doc.zeros = doc.array.filter(function(x) { return x.id == 0 });
doc.array = doc.array.filter(function(x) { return x.id != 0 });
db.foo.save(doc)};
)