gpt4 book ai didi

mongodb - 是否可以在 Mongodb 中为动态字段创建索引?

转载 作者:行者123 更新时间:2023-12-04 18:03:32 24 4
gpt4 key购买 nike

我的站点有几个“域”,代表站点的子部分。每个“域”都有自己的用户和个人资料,以及一个搜索页面,您可以在其中根据用户填写的个人资料字段搜索用户。

“用户”集合中的用户数据结构如下:

{
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 在“domain1”下有 "skills": ["karate", "judo"],我想在 domain2 中搜索“karate”,我不会想要匹配 user1。

最佳答案

对于任何感兴趣的人,经过一天的研究,我已经回答了我自己的问题。

我是 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}
})

关于mongodb - 是否可以在 Mongodb 中为动态字段创建索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31057549/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com