mongoose 怎么多个model查询

比如

aModel = {
    user_id: String,
    file_name: String,
    page_id: Number
}
fileSchema = new Schema({
    page_id: Number,
    key: String,
    doc: String,
    title: String,
    sym: String
});

bModel = {
    user_id: String,
    file_name: String,
    origin_file: String,
    new_file: [fileSchema]
}

已知user_id,file_name,page_id,model是异步的,怎么同时查找这两个model,
得到两个结果后再进行下一步

阅读 6.9k
6 个回答

代码如下,其实我感觉写的一点也不优雅...

var aDocs ,bDocs =null ;
aModel.find({ user_id:xx , file_name:xx , page_id:xx})
    .then(function(docs){
        aDocs = docs;
        return bModel.find({ user_id:xx , file_name:xx , page_id:xx}) })
    .then(function(docs){
        bDocs = docs ;
        other codes
    })

如果你需要他们并发执行的话,可以用Promise

const query1 = aModel.find(query)
const query2 = bModel.find(query)
Promise.all([query1, query2]).then(rs => {})

如果不需要并发进行,可以同步进行的话,可以用 yield 或者 async/await

const query1 = yield aModel.find(query)
const query2 = yield bModel.find(query)

// 需要node7以上
const query1 = await aModel.find(query)
const query2 = await bModel.find(query)

使用mongoose的ref类型。类似关系型数据库的外键,再使用populate联合插询

clipboard.png
连查16张表, mongodb 本身是no sql 数据库,所有不会提供多表查询的方法, 你只能node异步控制查询

楼上当然是不怎么优雅的 你需要的是async/await 所以把node升级到7.6以上吧

是吗?mongoose api没有多表查询的方法吗?

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题