我有这个架构:
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的find来搜索任何这些标记的事件?
例如,此事件应该在结果中,因为它有tagId 23和tagId 55:
{
_id: ...,
name: 'Football tournament',
tags: [{ tagId: 23, name: 'football', description: '' },
{ tagId: 55, name: 'tournament', description: '' }]
}
如何查询查找函数?
我正在考虑使用:tags.tagId: {$in: arrayOfTagsIds}
但我认为这不会起作用(使用tags.tagId
听起来不合适,因为tags
是一个数组)
Event
.find({tags.tagId: {$in: arrayOfTagsIds}})
.exec(function (err, events) { ... }
另外,做这种查询太慢了?
答案 0 :(得分:3)
是的,您可以在嵌入式子文档和数组的键中使用点表示法。但是,您需要引用密钥,因为它包含一个点:
Event
.find({'tags.tagId': {$in: arrayOfTagsIds}})
.exec(function (err, events) { ... }
要加快此查询速度,您可以在'tags.tagId'
上创建索引。