我的网站有多个"域名"代表网站的子部分。每个"域"拥有自己的用户配置文件,以及一个搜索页面,您可以根据用户填写的个人资料字段搜索用户。
来自'用户的用户数据'集合的结构如下:
{
username: 'shawnmichaels',
first_name: 'Shawn',
last_name: 'Michaels',
domains: [
{
name: 'domain1',
user_fields: {
'bio': 'Short bio related to domain 1',
'skills': 'Pertinent skills for domain 1'
}
},
{
name: 'domain2',
user_fields: {
'bio': 'Short bio related to domain 2',
'skills': 'Pertinent skills for domain 2'
}
}
]
}
因此,用户拥有跨多个域的字段数据。域名和字段名称是动态的。用户可能有数百个域,域中可能有数十个字段。
是否可以使用某种动态索引,以便我可以在' domain1'下搜索字段。没有在' domain2'中获得任何匹配?
例如,如果某个用户1在“域1”下面有"skills": ["karate", "judo"]
,并且我想搜索“域名2”以及“#34;空手道"”,我就不想要匹配对于user1。
答案 0 :(得分:0)
对于任何有兴趣的人,经过一天的研究后,我已经回答了我自己的问题。
我是MongoDB的新手并没有意识到你可以像对待任何其他键一样对数组进行查询:
db.users.find({domains.title: 'domain1'})
// where 'domains' is an array of object each with a 'title' key
有了这些知识,我为每个想要搜索的字段添加了一个文本索引:
db.users.ensureIndex({
'username': 'text',
'first_name': 'text',
'last_name': 'text',
'domains.fields.bio': 'text',
'domains.fields.skills': 'text',
'domains.fields.title': 'text',
'domains.fields.training': 'text'
}, {name: 'domain_search'})
我在每个域中构建了搜索查询,如下所示:
db.users.find({
'domains.title': DOMAIN_NAME,
'$text': {'$search': SEARCH_TERM}
})