如果您实际上要求您希望“关系”以“其他方式”完成,那么答案是首先以这种方式“存储”该关系。
所以:
var bookSchema = new Schema({
title: { type: String },
author: { type: Schema.Types.ObjectId }
});
因此,将“关系”视为“双向”,因为每个对象都具有与另一个对象“关联”所需的信息。
这基本上意味着你可以这样做:
Books.find({ "author": authorId })
.populate("author")
.exec(function(err,books) {
// stuff in here
});
没有可怕的结构:
Books.find().execute(function(err,books) {
var results = [];
async.each(books,function(book,callback) {
Author.findOne({ "books": book._id },function(err,author) {
var obj = book.toObject();
book.author = author;
results.push(books);
callback(err);
});
},
function(err) {
if (err) throw err;
console.dir(results);
});
})
所以按照最初的建议做得更好。