mongodb collection.find找不到文件

时间:2018-06-16 22:36:56

标签: mongodb mongodb-stitch

绝对的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() {...}

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

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

2 个答案:

答案 0 :(得分:0)

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

       .find({}) or .findOne({})
    
  3. 在学习使用mongo时,请考虑使用express + mongoose而不是stitch。它是使用mongo的后端经过试验和测试的设置。稍后重构你的代码会更容易,而不是在缺乏文档时继续前进。

  4. 希望有所帮助!

答案 1 :(得分: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()对于继续处理非常重要

但如果要使用 findOne({}) 为此:

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