0

这里绝对是 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()上面没有找到任何记录,结果是一个空数组。如果我通过前端在另一个集合中创建一个文档,我可以毫无问题地找到它。

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

4

2 回答 2

0
  1. 您可以从 CLI 运行 find 或 findOne 并获得积极的结果吗?或者在 Compass 中确认该集合在那里,在那个数据库中......
  2. 自从我做任何 mongo 东西以来已经有一段时间了,但我认为您需要为查询添加空对象,所以

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

希望有帮助!

于 2018-06-17T08:03:50.963 回答
0

首先,您应该在模型中导入“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()对于处理 continue 非常重要

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

db.collection("products")
    .findOne({ _id: mongodb.ObjectID(prodId) })
    .then(product => {
            console.log(product);
            return product;
          })
于 2019-04-09T07:53:58.167 回答