绝对的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()
找不到记录,结果是一个空数组。
如果我通过另一个集合的前端创建文档,我可以毫无问题地找到它。
我想这里没有简单的答案,但任何提示都会受到高度赞赏。非常感谢!
答案 0 :(得分:0)
因为我做过任何mongo的东西已经有一段时间了,但我认为你需要为查询添加空对象所以
.find({}) or .findOne({})
在学习使用mongo时,请考虑使用express + mongoose而不是stitch。它是使用mongo的后端经过试验和测试的设置。稍后重构你的代码会更容易,而不是在缺乏文档时继续前进。
希望有所帮助!
答案 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;
})