【问题标题】:Trouble fetching multiple documents using find() in MongoDB在 MongoDB 中使用 find() 获取多个文档时遇到问题
【发布时间】:2018-02-08 08:59:14
【问题描述】:

我正在尝试从我的 MongoDB 数据库中的集合中获取多个满足特定条件的文档。当我使用 findOne() 时,它可以正常工作并返回符合条件的第一个文档,但 find() 并没有返回所有文档。我检查了很多网站和文档,但仍然没有找到很好的例子来说明它是如何完成的。这是我正在尝试的当前语法:

   db.collection('mycollection').find({someproperty : 
   somevalue}).then((docs)=>{
      // trying to do something with the returned documents 'docs'
   }

另外,我真的更喜欢非猫鼬解决方案,除非这绝对不可能使用普通的 MongoDB。我知道 mongoose 可能更容易,但我想知道 MongoDB 的实现。

【问题讨论】:

  • 你怎么知道它没有返回所有文件?
  • 尝试在没有像 {} 这样的属性的情况下使用它,看看它会返回什么
  • 我尝试进行空查询 - 就像 find() 一样,但这也没有用。这似乎是不正确的语法,因为我的服务器响应 503 服务不可用,但如果它只是 findOne() 则返回第一个文档。真的不知道怎么回事:/

标签: node.js mongodb ecmascript-6


【解决方案1】:

Mongo Docs 中,find 函数返回一个cursor

光标指向符合查询条件的文档。当 find() 方法“返回文档”时,该方法实际上是将光标返回到文档。

我猜你期待一个数组?您需要使用toArray 函数,其文档为https://mongodb.github.io/node-mongodb-native/api-generated/cursor.html#toarray

不幸的是,它是一个回调,没有实现承诺,所以你需要自己把承诺放在那里。

return new Promise((resolve, reject) => db.collection('mycollection')
  .find({someproperty : somevalue})
  .toArray((err, documents) => resolve(documents)));

【讨论】:

  • 非常感谢!我不知道 toArray 函数。完美工作:)
猜你喜欢
  • 2014-01-31
  • 1970-01-01
  • 1970-01-01
  • 2018-08-08
  • 1970-01-01
  • 2017-07-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多