在数组字段的对象内使用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一个索引。