【问题标题】:MongoDB get a partial documentMongoDB获取部分文档
【发布时间】:2022-01-12 08:25:57
【问题描述】:

我有一个存储在 MongoDB 中的文档:

{
   "id": 1,
   "op": "someone",
   "title": "some title",
   "category": 1,
   "conversation": {
      "1": {
         "user": 2,
         "comment": "some comment"
      },
      "2": {
         "user": 9,
         "comment": "comment 2"
      },
      ......
      "26": {
         "user": 5,
         "comment": "comment 26"
      }
   }
}

我想根据要求得到这个: (例如 POST {"id":1, "page":2})

{
  "id": 1,
  "op": "someone",
  "title": "some title",
  "category": 1,
  "conversation": {
     "11": {
        "user": 10,
        "comment": "comment 11"
     },
     ......
     "20": {
        "user": 25,
        "comment": "comment 25"
     }
   }
}

即从 11 日开始 10 cmets,即

第 1 页:返回 cmets 1 - 10,

第 2 页:返回 cmets 11 - 20,

......

第 10 页:返回 cmets 91 - 100

我正在使用 NodeJS。由于在节点中处理它会占用大量内存。我想在 Mongo 中执行此操作。

【问题讨论】:

    标签: javascript node.js json mongodb express


    【解决方案1】:

    您可以使用Mongo aggregation pipeline 对文档进行一些强大的重塑。

    看起来$redact 阶段可以满足您的需求 - MongoDB 站点上有一个非常相似的example,他们希望从文档中的数组中检索特定元素。

    【讨论】:

      【解决方案2】:

      为了在 MongoDB 端进行该过程,您可以使用 skip() 和 limit() 函数

      const document_by_page = 10;
      const page = 1;
      
      db.collection.find().skip(page * document_by_page).limit(document_by_page);
      

      使用来自 cmets 的新信息,您应该使用 mongo db 管道来处理 MongoDB 端的信息。看一眼 https://docs.mongodb.com/manual/reference/operator/aggregation/filter/#mongodb-expression-exp.-filter.

      祝您找到解决方案愉快

      【讨论】:

      • 问题是整个json是一个文档。
      • 这不是问题,您目前不需要访问文档来跳过和限制一组文档来对您的集合进行分页。我得到你的问题你想对你的对话属性进行分页吗?
      • 是的。但这不起作用,因为它们不是单独的文档。
      猜你喜欢
      • 2023-03-12
      • 1970-01-01
      • 2014-02-02
      • 1970-01-01
      • 2022-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-19
      • 2014-11-15
      相关资源
      最近更新 更多