【问题标题】:mongodb collection.find not finding documentsmongodb collection.find 找不到文档
【发布时间】:2019-04-09 15:53:58
【问题描述】:

这里绝对是 mongodb 新手,我必须说我对文档印象不深。无论如何,我的问题是我在 Mongodb Atlas 上有一个数据库,这是一个带有 next.js 前端的 Stitch 应用程序,并试图检索这样的数据:

import { setStitchClient } from '../utils/stitch';

export default class MyPage extends React.Component {
  static async getInitialProps() {
    const stitchClient = await setStitchClient();
    const db = stitchClient.service('mongodb', 'mongodb-atlas').db('dbName');

    await stitchClient.login();
    const docs = await db
      .collection('test')
      .find()
      .limit(200)
      .execute();
    return { docs: docs };
}

  render() {...}

测试集合包括 150 个使用 mongoimport cli 导入的文档。我验证了文件是否正确导入。但是上面的.find() 没有找到任何记录,结果是一个空数组。 如果我通过前端在另一个集合中创建一个文档,我可以毫无问题地找到它。

我想这里没有简单的答案,但任何提示都会受到高度赞赏。非常感谢!

【问题讨论】:

  • 您的问题是什么?有什么不工作吗?如果有,是什么?
  • 对不起,我完全省略了实际问题。现在更新了。所以问题是:您是否在我的代码中看到任何错误,可以解释为什么我在导入的集合中找不到任何文档?
  • 不确定到底是什么缝合,但我认为您的问题可能是二分之一。 1. 有时语言的 mongo 抽象对它们的查询非常挑剔,这意味着有时如果你想真正检索 find({}) 之类的所有内容,你必须发送一个空的 json 2. 我读到那个缝合是异步的?不确定这一点,但如果是这样,你可能会遇到这样的问题。您可以尝试在 execute 方法之后添加一个 .then 子句并在其回调中工作。希望这至少能给你一个想法。
  • 我喜欢@Roger 的想法。我还认为您可能想要拨打 limit 电话,因为您只有 150 个文档,这是测试代码。 (去掉一个“黑匣子”,你对它的内部结构就少了一件想知道的事情。)最后,虽然我根本不了解 Stitch,但你能简化这段代码以及它是如何执行的吗?也许让它同步,从而确保时间不是问题?

标签: mongodb mongodb-stitch


【解决方案1】:
  1. 能否从 CLI 运行 find 或 findOne 并获得肯定的结果?或者在 Compass 中确认该集合在该数据库中...
  2. 我已经有一段时间没有做任何 mongo 的东西了,但我认为您需要为查询添加空对象,所以

       .find({}) or .findOne({})
    
  3. 在学习使用 mongo 时,请考虑使用 express + mongoose 而不是缝合。这是使用 mongo 的后端久经考验的设置。重构你的代码以便稍后缝合,而不是在缺乏文档的情况下继续前进。

希望有帮助!

【讨论】:

  • 感谢您的回答@stoepszli。我尝试了 1 和 2。可以看到 Compass 中的文档,并且空对象没有改变任何东西。我去看看猫鼬,谢谢你的建议!
【解决方案2】:

首先,您应该在模型中导入“mongodb”。

如果你想使用 find() 然后在你的方法中这样做:

db.collection("your collection name")
.find({ _id: mongodb.ObjectID(prodId) })
.next()
.then(product => {
        console.log(product);
        return product;
      })

mongodb.ObjectID(id)让您可以通过字符串比较数据库中的id和_id。

next() 对继续处理非常重要

但如果你想使用 findOne({}) 这样做:

db.collection("products")
    .findOne({ _id: mongodb.ObjectID(prodId) })
    .then(product => {
            console.log(product);
            return product;
          })

【讨论】:

    猜你喜欢
    • 2021-06-26
    • 1970-01-01
    • 2020-07-29
    • 1970-01-01
    • 1970-01-01
    • 2014-02-04
    • 1970-01-01
    • 2021-04-04
    • 1970-01-01
    相关资源
    最近更新 更多