带有字段的MongoDB文档,用于计算数组元素

时间:2016-02-19 16:41:34

标签: arrays mongodb mongodb-query

给定一个包含任意数组的MongoDB文档集合,可以根据数组的长度对文档进行排序。

我看到可以使用aggregation或存储数组长度的附加字段来访问它。

我正在处理一种QueryBuilder并没有使用aggregation,所以我选择添加另一个字段。

所以我需要一个迁移脚本来更新集合的所有文档,以便添加一个字段,其中包含每个文档的数组长度。

通过对所有集合进行一次更新操作,可以实现此更新吗?怎么样? 我为此尝试aggregation,我得到每个文档的每个数组的长度,但我不知道如何使用更新文档。

2 个答案:

答案 0 :(得分:3)

我在我的一个系列上测试了它,它运行正常。

“评论”是一个无论如何的数组。保存后,数组的大小在“comments_size”中。

请确保在此操作期间没有任何并发​​写入。

db.posts.find({}).forEach(
  function(doc) {
    var size = doc.comments.length;
    doc.comments_size = size;
    db.posts.save(doc);
  }
)

答案 1 :(得分:1)

如评论中所述,您可以使用聚合返回的游标逐个更新文档。这是一个如何在shell中完成它的快速示例:

var cursor = db.collection.aggregate([{ 
    $group: { 
                "_id": "$id", 
                arrayLength: { $size: "$array" } 
    }
}]);

cursor.forEach( function(doc) { 
    db.collection.update({ 'id': doc.id },{ arrayLength: doc.arrayLength }); 
});