如何在 Mongodb 的 find 中计算文档? [复制]

Posted

技术标签:

【中文标题】如何在 Mongodb 的 find 中计算文档? [复制]【英文标题】:How can I count docs in find in Mongodb? [duplicate] 【发布时间】:2019-10-14 09:22:20 【问题描述】:

我正在尝试计算 mongodb 请求中的文档。

我可以在toArray()-s 回调中计算count = docs.length,但总是给10。 A 可以做 2 个相同的请求,只需将 find 替换为 count 但这似乎是错误的

let count;
  db.get().collection('images').find(
     $and: [
     tags:  $in: tags , 
     date: $gte: date.toISOString(), 
     title:$regex: query, $options: "$i", 
  ],
  (err, docs)=>docs.toArray((err, res)=>
    count= res.length
  )
)
  .skip(0).limit(10).toArray((err, docs)=>    
    res = data:docs, dataLength:count 
    cb(err, res);
// )   
);   

我遇到了这个错误:TypeError: Cannot read property 'skip' of undefined

【问题讨论】:

【参考方案1】:

您可能总是收到 10 回,因为您在执行 .limit(10) 时特别说“给我 10 回”。现在,您收到该错误的原因是因为必须将.skip 添加到.find() 的末尾。您的查询应该是这样的:

db.collection('images').find(
  $and: [
    tags:  $in: tags , 
    date: $gte: date.toISOString(), 
    title:$regex: query, $options: "$i",
  ]
).skip(0).limit(10).toArray((err, docs) => 
  if (err)  console.log(err) 
  else 
    let res = data:docs, dataLength:docs.length
    // do any other logic here
  
)

【讨论】:

以上是关于如何在 Mongodb 的 find 中计算文档? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

在 mongodb 中,如何仅选择文档中与 find() 条件匹配的对象?

如何在 MongoDB shell 中打印出 20 多个项目(文档)?

MongoDB 中 查询(find) 指南

如何停止在 mongodb 集合中插入重复文档

MongoDB find() 在匹配(字段,值)时返回子文档

MongoDB find() 在匹配(字段,值)时返回子文档