在数组字段的对象内使用mongoose寻找匹配

我有这个模式:

var eventSchema = new mongoose.Schema({ name: String, tags: [{ tagId: mongoose.Schema.Types.ObjectId, name: String, description: String }], }); var Event = mongoose.model('Event', eventSchema); 

还有一些标签ID,例如:

 var arrayOfTagsIds = [23, 55, 71]; // in this example I'm not using real mongo id's, which are strings 

我怎样才能使用mongoose的发现search具有任何这些标签的事件?

例如,这个事件应该在结果中,因为它有tagId 23和tagId 55:

 { _id: ..., name: 'Football tournament', tags: [{ tagId: 23, name: 'football', description: '' }, { tagId: 55, name: 'tournament', description: '' }] } 

如何查询内部查找function?

我正在考虑使用: tags.tagId: {$in: arrayOfTagsIds}但我不认为这会工作(这听起来不错,使用tags.tagId ,因为tags是一个数组)

 Event .find({tags.tagId: {$in: arrayOfTagsIds}}) .exec(function (err, events) { ... } 

另外,做这种查询太慢了?

是的,您可以在键中使用点符号来表示embedded的子文档和数组。 但是,您需要引用您的密钥,因为它包含一个点:

 Event .find({'tags.tagId': {$in: arrayOfTagsIds}}) .exec(function (err, events) { ... } 

为了加快这个查询,你可以在'tags.tagId'上创build一个索引。