使用 Mongoose 的 find() 时遇到问题,正确的使用方法是啥?

Posted

技术标签:

【中文标题】使用 Mongoose 的 find() 时遇到问题,正确的使用方法是啥?【英文标题】:Having trouble using Mongoose's find(), what is the correct way to use it?使用 Mongoose 的 find() 时遇到问题,正确的使用方法是什么? 【发布时间】:2021-10-26 01:16:33 【问题描述】:

我目前正在使用 mongoose 和 nodeJS 学习 MongoDB。我正在尝试将笔记存储到名为“笔记”的数据库中。为此,我首先像这样连接到数据库:

mongoose.connect(`mongodb+srv://pedro_yanez:$password@fsopen-2021-project.ngteq.mongodb.net/note-app?retryWrites=true&w=majority`,

    useNewUrlParser: true,
    useUnifiedTopology: true,
)

然后,我创建了一个 Note Schema 和一个 Note Model:

const noteSchema = new mongoose.Schema(
    content: String,
    date: Date,
    important: Boolean
)

const Note = mongoose.model('Note', noteSchema)

然后,我将三个文档保存到数据库中:

 const note = new Note(
     content: 'Note #N',
     date: new Date(),
     important: true
 )

 note.save().then(result => 
     console.log('note saved!')
     mongoose.connection.close()
 )

这是成功的,因为我可以在 MongoDB Atlas 的集合中看到它们,但是当我尝试使用 mongoose 的 find() 方法以下列方式查询上传的笔记时:

Note.find().then(result => 
result.forEach(note => 
        console.log(note)
    )
    mongoose.connection.close()
)

我收到以下错误:

node_modules/mongoose/lib/query.js:2151
    return cursor.toArray(cb);
                  ^

TypeError: cursor.toArray is not a function

请注意,我附加的代码来自 HY 的“Full Stack Open 2021”课程,来自 part3.c。

我还尝试将find() 与here 所述的回调函数一起使用:

Note.find(, function (err, docs) console.log(docs));
mongoose.connection.close()

但我得到“未定义”和另一个错误:

/node_modules/mongodb/lib/collection.js:238
            throw new error_1.MongoInvalidArgumentError('Method "collection.find()" accepts at most two arguments');
                  ^

MongoInvalidArgumentError: Method "collection.find()" accepts at most two arguments

我真的可以提示我的实现出了什么问题,因为我整天都在与这个作斗争!

【问题讨论】:

【参考方案1】:

我看到我们在 Fullstack open 上进行了相同的练习。 从https://mongoosejs.com/ 快速开始后,我设法记录了所有“笔记”

mongoose.connect 之后:

    const db = mongoose.connection;
    db.on('error', console.error.bind(console, 'connection error:'));
    db.once('open', function() 
        // Here I used the Model.find() at the end of the page and closed 
        // the connection as they say in the lesson.
    );

这里有用,希望对你有帮助。

【讨论】:

是的,需要打开数据库连接,然后才能对其进行读取/写入。

以上是关于使用 Mongoose 的 find() 时遇到问题,正确的使用方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

Mongoose:使用 find() 并将值归因于变量时,save() 不是函数

查看单个文档的数组时,mongoose .find() 没有结果

Mongoose find 可以返回所有但不仅仅是一个

mongoose使用之查询篇

mongoose.find() 每次都不返回

Mongoose .find() 通过枚举字段搜索时返回一个空数组