spo*_*rts 2 mongoose mongodb node.js
我有这个架构:
var eventSchema = new mongoose.Schema({
name: String,
tags: [{
tagId: mongoose.Schema.Types.ObjectId,
name: String,
description: String
}],
});
var Event = mongoose.model('Event', eventSchema);
Run Code Online (Sandbox Code Playgroud)
以及一系列标签 ID,例如:
var arrayOfTagsIds = [23, 55, 71];
// in this example I'm not using real mongo id's, which are strings
Run Code Online (Sandbox Code Playgroud)
我如何使用猫鼬的查找来搜索该事件有任何这些标签的?
例如,这个事件应该在结果中,因为它有 tagId 23 和 tagId 55:
{
_id: ...,
name: 'Football tournament',
tags: [{ tagId: 23, name: 'football', description: '' },
{ tagId: 55, name: 'tournament', description: '' }]
}
Run Code Online (Sandbox Code Playgroud)
find 函数中的查询必须如何?
我正在考虑使用:tags.tagId: {$in: arrayOfTagsIds}但我认为这行不通(使用听起来不太好tags.tagId,因为它tags是一个数组)
Event
.find({tags.tagId: {$in: arrayOfTagsIds}})
.exec(function (err, events) { ... }
Run Code Online (Sandbox Code Playgroud)
另外,做这种查询是不是太慢了?
是的,您可以在嵌入的子文档和数组的键中使用点表示法。但是,您确实需要引用您的密钥,因为它包含一个点:
Event
.find({'tags.tagId': {$in: arrayOfTagsIds}})
.exec(function (err, events) { ... }
Run Code Online (Sandbox Code Playgroud)
要加速此查询,您可以在 上创建索引'tags.tagId'。
| 归档时间: |
|
| 查看次数: |
4680 次 |
| 最近记录: |