Подход Джоша отлично подходит для поиска отдельных документов, но моя ситуация была немного более сложной. Мне нужно было найти вложенное свойство для всего массива объектов. Например, моя модель выглядела так:
var TransactionSchema = new Schema({
...
, notebooks: {type: [Notebook]}
});
var NotebookSchema = new Schema({
...
, authorName: String // this should not necessarily persist to db because it may get stale
, authorId: String
});
var AuthorSchema = new Schema({
firstName: String
, lastName: String
});
Затем в коде моего приложения (я использую Express), когда я получаю транзакцию, я хочу, чтобы все записные книжки с фамилией автора:
...
TransactionSchema.findById(someTransactionId, function(err, trans) {
...
if (trans) {
var authorIds = trans.notebooks.map(function(tx) {
return notebook.authorId;
});
Author.find({_id: {$in: authorIds}, [], function(err2, authors) {
for (var a in authors) {
for (var n in trans.notebooks {
if (authors[a].id == trans.notebooks[n].authorId) {
trans.notebooks[n].authorLastName = authors[a].lastName;
break;
}
}
}
...
});
Это кажется крайне неэффективным и хакерским, но я не мог придумать другой способ сделать это. Наконец, я новичок в node.js, mongoose и stackoverflow, так что извините, если это не самое подходящее место для продолжения этого обсуждения. Просто решение Джоша было самым полезным в моем возможном «решении».