首页 > 解决方案 > 从 MongoDB 集合中的特定文档开始获取“n”个文档

问题描述

这是否可以n从集合中获取文档数量,并且应该从特定对象开始获取。例如,如果一个集合有 100 个文档,那么我需要从 46 [特定 id] 开始的 10 个文档。即46-55

return new Promise((resolve, reject) => {
  return products_model.find({'from_id' : 9677270841774}).limit(limit).exec((err, records) => {
    if(err)
        reject(err)
    else    
        resolve(records)
  })
})

编辑:原文档结构如下:

{ 
    "_id" : ObjectId("6128a0d9cf34c208c30e6800"), 
    "id" : 3238425384636, 
    "title" : "i3jMH8CHPWY6Ru18KrmsDGdiyl2qDuFjxXD1M4yCzJHrOmSF8v", 
    "body_html" : "This is body", 
    "vendor" : NumberInt(1), 
    "__v" : NumberInt(0)
},
{
    "_id" : ObjectId("6128a0d9cf34c208c30e6805"), 
     "id" : 30336405569734,
},
{},
{},
{},
{}

API是

http://localhost:3000/products.json?since_id=30336405569734&limit=10

标签: node.jsmongodbmongoosenosql

解决方案


以 10ids 为例,我们希望从 4 开始获得 4 个 ids

  • 过滤器 ID>=4
  • 排序升序id
  • 限制 2

对于您想要读取查询字符串然后您想要的数据, id>=30336405569734并且limit 10.(数字不是字符串)

测试代码在这里

您可以在 mongoose 中使用聚合。

db.collection.aggregate([
  {
    "$match": {
      "id": {
        "$gte": 4    // "$gte": 30336405569734 (for your data)
      }
    }
  },
  {
    "$sort": {
      "id": 1
    }
  },
  {
    "$limit": 2    //  "$limit": 10 (for your data)
  }
])

或者在猫鼬中写一个发现,我不使用猫鼬,但我认为它会是这样的。

products_model.find({ id: { $gte: 30336405569734 } })
  .sort({id: 1})
  .limit(10)
  .then(products => {
    console.log(products)
  });

或者

await products_model.find({ id: { $gte: 30336405569734 } })
  .sort({id: 1})
  .limit(10));

推荐阅读