根据由字段值指定的嵌入式对象的字段值对MongoDB集合排序?

阿德里安·维梅尔(Adriaan Vermeire)

在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

我该怎么做?提前致谢!

s7vr

您可以在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}}
])

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

从mongodb集合中的嵌入式数组对象仅获取特定字段

Mongodb node.js 查询嵌入式文档具有多个值的单个字段。

按嵌入式文档字段排序

Mongodb更新嵌入式字段

MongoDB:检索、过滤和排序 MongoDB 嵌入式集合

需要从MongoDB嵌入式集合中计算单个字段计数

mongodb汇总嵌入式文档值

如何根据POJO的特定字段值对集合进行排序?

如果嵌入式摘要字段在Crystal Reports中具有某个值,则禁止显示文本对象

如何在MongoDB的数组字段中查询和删除嵌入式对象?

如何对MongoDB中的嵌入式对象进行排序

如何在Mongoid中找到字段值为nil的嵌入式文档?

根据mongoDB聚合中的条件,项目嵌入式文档密钥值

根据对象字段的分组对列表进行排序,根据组中的最大值进行排序

Mongo查询的存在和嵌入式对象属性的值

如何使用jQuery .find()从嵌入式对象检索值

MongoDB聚合:通过动态字段路径从嵌入式文档添加字段

在MongoDB中排除嵌入式文档中除单个字段之外的所有字段

根据不同的字段和值进行排序

根据Laravel中的几个值对字段排序

从嵌入式文档中删除字段

嵌入式的Hibernate延迟加载字段

JPA多个嵌入式字段

从嵌入式结构访问结构字段

Mongo嵌入式文档字段查询

如何根据字段是否存在对MongoDB集合排序

如何将ObjectIds数组转换为带有包含原始数组元素值的字段的嵌入式文档数组

用户使用嵌入式脚本标记使用事件侦听器输入后,获取输入字段的值

聚合管道中的嵌入式文档集合中的参考文档字段