是否可以在子文档键上创建mongodb索引,这些键在每个文档中可以不同?例如,如果我们有
{
_id: 1,
languages: {
en: {...},
fr: {...},
de: {...}
}
},
{
_id: 2,
languages: {
cs: {...},
fr: {...}
}
}
...在语句的键上创建和索引,以便稍后在find()中查看是否存在这种语言(类似“languages.fr”:{$ exists:true})。
我认为这应该类似于在数组字段上创建索引,如果语言是数组:
{ _id: 1, languages: ['en', 'fr', 'de']},
{ _id: 2, languages: ['cs', 'fr']}
db.coll.createIndex( { languages: 1 } )
答案 0 :(得分:1)
是否可以在子文档键上创建mongodb索引,这些键在每个文档中可以不同?
不。相反,您将需要使用允许您创建通用索引的faceted search data model。
例如:
{
_id : 1,
languages: [
{ "language": "en", "content" : ... },
{ "language": "fr", "content" : ... },
{ "language": "de", "content" : ... },
...
]
}
查询可能如下所示:
db.coll.find({
"languages" : {
"$elemMatch" : {
"language" : "en", "content" : ...
}
}
})
或
db.coll.find(( { "languages.language" : "en" } )
(详见上文链接)
集合上的索引是:
{ "languages.language" : 1, "languages.content" : 1 }