我有一个包含多个文档的数据库。每个doc都有一个user_id字段。 假设这些文档属于两个用户:1和2。 我想为每个用户提取一个最新的doc。我该如何实现搜索索引? 我现在可以使用:user_id:1来获取用户的所有文档 但是,如何在一个查询中将每个用户的文档编号限制为一个?
答案 0 :(得分:0)
假设您在每个文档上都有一个日期属性,您可以按如下方式完成此操作:
创建以下索引:
{
"index": {
"fields": [
{"user_id":"desc"},
{"date_field":"desc"}
]
},
"type": "json"
}
要查询user_id
==“1”的最新文档,您的查询将如下所示:
{
"selector": {
"user_id": "1"
},
"fields": [
"_id",
"user_id",
"date_field"
],
"sort": [
{ "user_id": "desc" },
{ "date_field": "desc" }
],
"limit":1
}
如果您尝试在单个查询中返回多个用户,则必须执行以下操作:
latest
或类似在user_id
和latest
上添加索引:
{
"index": {
"fields": [
"user_id",
"latest"
]
},
"type": "json"
}
每当您添加新文档时,请找到user_id
为latest
的文档:
{
"selector": {
"user_id": "1",
"latest" : true
},
"fields": [
"_id",
"user_id",
"latest"
]
}
在该文件上设置latest
= false
latest
= true 此查询将为所有用户找到最新的文档:
{
"selector": {
"user_id": {"$gt":null},
"latest" : true
},
"fields": [
"_id",
"user_id",
"latest"
]
}