在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
。
我该怎么做?提前谢谢!
答案 0 :(得分:0)
db.collection_name.aggregate([
{$sort : {"data.fields.value" : 1}}
])
将按升序对结果进行排序。
如果您希望按降序对集合进行排序,则可以将1
替换为-1
。
答案 1 :(得分:0)
您已嵌套子文档。为了将嵌套的子文档排序到该特定文档。
<?xml version="1.0" encoding="UTF-8"?>
<SplitOrder>
<Header Info="Some Info" Info2="More Info" Info3="More Info">
<Order Number="1" Date="1/23/2018 10:53:00 AM">
<OrderCharges Charge="0.00000"/>
</Order>
</Header>
</SplitOrder>
答案 2 :(得分:0)
您可以在3.4中尝试以下聚合。
我们的想法是将字段与字段匹配。以下查询中的location
。
$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}}
])