我有一个包含10,000个文档的MongoDB集合.我想 for each 包含字符串值的文档添加一个新字段,其中前100个文档的值应该是"1",接下来的100个文档的值应该是"2",依此类推.我怎么能这样做呢?

推荐答案

一种 Select 是使用$setWindowFields:

db.collection.aggregate([
  {$setWindowFields: {
      sortBy: {date: 1},
      output: {value: {
          $sum: 1,
          window: {documents: ["unbounded", "current"]}
      }}
  }},
  {$set: {
      value: {$toString: {
          $add: [
            {$floor: {$divide: [{$subtract: ["$value", 1]}, 100]}},
            1
          ]
      }}
  }}
])

看看它在playground example号公路上是如何工作的

Mongodb相关问答推荐

geoLocation或geoNear为坐标和半径使用let变量

MongoDB—基于数组中同一文档中的另一个字段更新字段

我无法将文档发送到我的MongoDB集合,因为它告诉我使文档无效

MongoDB与合并对象聚合

在MongoDB中获取所有帖子时如何获取相关用户信息

在服务器上部署后端时判断??=默认判断

如何为具有相同名称的嵌套字段创建文本索引

聚合 $accumulator + $project

有没有办法从另一条记录中插入一条记录

mongoDB 过滤、排序和排名结果

当属性确实存在时,为什么mongoose模型的 hasOwnProperty 返回 false?

Meteor mongo 驱动程序可以处理 $each 和 $position 运算符吗?

使用 Node.js 和 mongodb 处理超时

为多个日期范围聚合 $group

在 mongoDB 中展平嵌套的 JSON struct

从 mongo 结果中删除 _id

MongoError:Can't extract geo keys from object

我如何将 mongodb 与electron一起使用?

Mongoose 为所有嵌套对象添加 _id

Mongodb Compass 无法在 Ubuntu 18.10 中打开