Nodejs Mongoose的model.find()查出来的为啥不是文档呢 求帮助
Nodejs Mongoose的model.find()查出来的为啥不是文档呢 求帮助
查询出来是一堆没用的东西呢,为啥不是文档呢:
//db.js var mongoose = require(‘mongoose’); mongoose.connect(‘mongodb://localhost/mybooks’); module.exports = mongoose;
//find.js var mongoose = require(’./db’); var Schema = mongoose.Schema; var booksSchema = new Schema({ name: String, author: String });
var bookModel = mongoose.model(‘ctbook’, booksSchema); console.log(bookModel.find());
{ _mongooseOptions: {}, mongooseCollection: { collection: null, opts: { bufferCommands: true, capped: false }, name: ‘ctbooks’, conn: { base: [Object], collections: [Object], models: {}, replica: false, hosts: null, host: ‘localhost’, port: 27017, user: undefined, pass: undefined, name: ‘mybooks’, options: [Object], otherDbs: [], _readyState: 2, _closeCalled: false, _hasOpened: false, _listening: false, _events: {}, db: [Object] }, queue: [], buffer: true }, model: { [Function: model] base: { connections: [Object], plugins: [], models: [Object], modelSchemas: [Object], options: [Object] }, modelName: ‘ctbook’, model: [Function: model], db: { base: [Object], collections: [Object], models: {}, replica: false, hosts: null, host: ‘localhost’, port: 27017, user: undefined, pass: undefined, name: ‘mybooks’, options: [Object], otherDbs: [], _readyState: 2, _closeCalled: false, _hasOpened: false, _listening: false, _events: {}, db: [Object] }, discriminators: undefined, schema: { paths: [Object], subpaths: {}, virtuals: [Object], nested: {}, inherits: {}, callQueue: [], _indexes: [], methods: {}, statics: {}, tree: [Object], _requiredpaths: undefined, discriminatorMapping: undefined, _indexedpaths: undefined, options: [Object], _events: {} }, options: undefined, collection: { collection: null, opts: [Object], name: ‘ctbooks’, conn: [Object], queue: [], buffer: true } }, op: ‘find’, options: {}, _conditions: {}, _fields: undefined, _update: undefined, _path: undefined, _distinct: undefined, _collection: { collection: { collection: null, opts: [Object], name: ‘ctbooks’, conn: [Object], queue: [], buffer: true } }, _castError: null }
根据你提供的代码,问题出在 console.log(bookModel.find());
这一行。model.find()
方法返回的是一个 Promise,而不是直接返回查询结果。你需要使用 .then()
或 async/await
来处理这个 Promise。
示例代码
db.js
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/mybooks', { useNewUrlParser: true, useUnifiedTopology: true });
module.exports = mongoose;
find.js
var mongoose = require('./db');
var Schema = mongoose.Schema;
// 定义书籍模型
var booksSchema = new Schema({
name: String,
author: String
});
var bookModel = mongoose.model('ctbook', booksSchema);
// 使用 async/await 处理 Promise
async function findBooks() {
try {
const books = await bookModel.find();
console.log(books); // 打印查询结果
} catch (error) {
console.error(error);
}
}
findBooks();
解释
-
连接 MongoDB:
- 在
db.js
中,我们使用mongoose.connect
方法连接到本地的 MongoDB 数据库mybooks
。 - 添加了
{ useNewUrlParser: true, useUnifiedTopology: true }
参数来避免一些常见的警告信息。
- 在
-
定义模型:
- 在
find.js
中,我们定义了一个书籍模型booksSchema
,它有两个字段:name
和author
。 - 使用
mongoose.model
方法创建一个模型实例bookModel
。
- 在
-
查询数据:
- 使用
async/await
来处理异步操作,确保我们能够正确地获取到查询结果。 bookModel.find()
返回一个 Promise,我们需要等待这个 Promise 解析后才能获取到实际的数据。
- 使用
通过这种方式,你可以正确地获取并打印查询结果,而不是打印一个 Promise 对象或一堆未解析的数据。
直接在用mongo能查到吗? 如果可以的话。那就是你mongoose用的有问题。 我是这样用的 <pre><code>var meetingSchema = new Schema({ id:Schema.Types.ObjectId, meetingRoomName: String, meetingId:String, meetingSubject:String, members: Schema.Types.Mixed, updated: { type: Date, default: Date.now }, startTime:{ type: Date, default: Date.now }, ownerCorpId:String, ownerName:String }); var meetingModel = mongoose.model(‘meetings’, meetingSchema); var query2 = meetingModel.find(conditions); query1.exec();</code></pre>
你这貌似打出来的是mongoose吧。
Model.find()查出来的就是文档 ,应该是哪里写错了吧 , 上代码瞧瞧
find查询出来的是mongoose的doc对象,支持update等操作,不是POJO,用doc.toObject()转换成POJO
bookModel.find({},[],{},function(err,docs){ console.log(docs); })