Вы можете использовать нотацию object.field
с mongoose для запроса встроенных документов.Однако вам может потребоваться убедиться, что во встроенном документе есть все поля, объявленные как часть схемы по порядку (в вашем примере вы запрашиваете "comments.name", но у PostSchema нет поля комментариев - возможно, это вызывает проблему?)
Мне удалось получить подтверждение концепции, работающей подобным образом, которая должна успешно работать как есть:
var mongoose = require('mongoose')
var Schema = mongoose.Schema
mongoose.connect('mongodb://localhost/testjs');
PostSchema = new Schema({
title: String,
body: String,
comments: [],
tags: [{type: Schema.ObjectId, ref: 'Tag' }]
});
TagSchema = new Schema({
name: String
});
var Post = mongoose.model('Post', PostSchema);
var mypost = new Post()
mypost.title = "yo"
mypost.body = "asfkjabfkjbsdf"
mypost.comments = [{'name':'javascript', 'text':'sup'}]
mypost.save(
function(err){
// Save the post, and then read it back by querying the embedded field
Post.find({'comments.name':'javascript'},function(err, posts){
console.log('posts: ', posts);
});
}
);