在 MongoDB 中,如何根据另一个字段值指定的嵌入对象的字段值对查询结果进行排序?
这是数据的表示:
{
field1 : 'value',
field2: 'value',
data: [
fields": [
{
_id: "5a8fdd13de5b074d4d4f572c",
field: "location",
value: "Antwerp"
},
{
_id: "5a8fdd13de5b074d4d4f572b",
field: "title",
value: "This is a good title"
},
{
_id: "5a8fdd13de5b074d4d4f572a",
field: "employmentType",
value: "Temporary"
}
]}
例如,我有一个包含此类文档的集合,我想根据 data.fields.value
对整个集合进行排序。我唯一拥有的是data.fields.field
。
我该怎么做?提前致谢!
最佳答案
您可以在 3.4 中尝试以下聚合。
这个想法是将字段投影到与字段匹配的位置。以下查询中的位置
。
$addFields
将计算文档保留为文档中的额外字段,后跟 $sort
对文档中的值字段进行排序。
$objectToArray
将字段内的字段对象转换为 $filter
内的键值对数组与 $and
与 $in
匹配键(字段)和值(位置)。
$project
排除删除排序文档以获取包含原始字段的文档。
$arrayElemAt
将单个文档的数组转换为单个文档。
db.col.aggregate([
{"$addFields":{
"mfield":{
"$arrayElemAt":{
"$filter":{
"input":{"$arrayElemAt":["$data.fields",0]},
"as":"field",
"cond":{
"$let":{
"vars":{"fieldkv":{"$objectToArray":"$$field"}},
"in":{
"$and":[
{"$in":["field", "$$fieldkv.k"]},
{"$in":["location", "$$fieldkv.v"]}
]
}
}
}
}
}
}},
{"$sort":{"mfield.value":-1}},
{"$project":{"mfield":0}}
])
关于mongodb - 根据字段值指定的嵌入对象的字段值对 MongoDB 集合进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48946599/