2

我在同一个集合中有很多文档,如下所示:

{
  "_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用来有条件地从数组中删除元素,但是是否可以重新定位这些拉取的元素?

4

1 回答 1

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)};
)
于 2013-11-08T13:06:03.973 回答