在Mongodb中使用聚合对复杂条件进行排序

布鲁诺·加布里埃尔·多斯·桑托斯

我创建了一个有关使用$ match的主题,该主题已解决,但现在我陷入了一个更复杂的示例。例如,考虑我的Json的结构:

{
    user: 'bruno',
    answers: [
        {id: 0, value: 3.5},
        {id: 1, value: "hello"}
    ]
}

我想添加或排序,对仅包含标识符“ id”等于0的“值”中包含的值进行一些转换,例如排序方法。

考虑以下数据:

db.my_collection.insert({ user: 'bruno', answers: [ {id: 0, value: 3.5}, {id: 1, value: "hello"}]})

db.my_collection.insert({ user: 'bruno2', answers: [ {id: 0, value: 0.5}, {id: 1, value: "world"}]})

我尝试使用:

db.my_collection.aggregate ({$sort: {"answers": {"$elemMatch": {id: 0, value: -1}}}})

但是,它没有用。预期结果为:{user:'bruno2'答案:[{id:0,value:0.5},{id:1,value:“ world”}]},{user:'bruno'答案:[{id: 0,value:3.5},{id:1,value:“ hello”}]})

谢谢。

大卫·斯托克

首先,请注意您的排序示例格式错误:aggregation方法将数组作为输入,其中数组中的每个元素都指定了聚合管道中的一个阶段。另外,请注意,$ elemMatch运算符不能用作$ sort阶段的一部分。

实现您的排序示例所用的一种方法是使用聚合框架的$ unwind管道运算符。展开数组将把数组元素一张一张地剥离到单独的文档中。例如下面的查询

db.my_collection.aggregate([ {$unwind: "$answers"} ]);

返回如下内容:

[
    {
        "_id" : ObjectId("5237157f3fac8e36fdb0b96e"),
        "user" : "bruno",
        "answers" : {
            "id" : 0,
            "value" : 3.5
        }
    },
    {
        "_id" : ObjectId("5237157f3fac8e36fdb0b96e"),
        "user" : "bruno",
        "answers" : {
            "id" : 1,
            "value" : "hello"
        }
    },
    {
        "_id" : ObjectId("523715813fac8e36fdb0b96f"),
        "user" : "bruno2",
        "answers" : {
            "id" : 0,
            "value" : 0.5
        }
    },
    {
        "_id" : ObjectId("523715813fac8e36fdb0b96f"),
        "user" : "bruno2",
        "answers" : {
            "id" : 1,
            "value" : "world"
        }
    }
]

添加$ match阶段将使您仅可以获取answer.id为零的文档。最后,$ sort阶段允许您按Answers.value进行排序。聚合查询总共是:

db.my_collection.aggregate([
    {$unwind: "$answers"},
    {$match: {"answers.id": 0}},
    {$sort: {"answers.value": -1}}
]);

并输出:

[
    {
        "_id" : ObjectId("5237157f3fac8e36fdb0b96e"),
        "user" : "bruno",
        "answers" : {
            "id" : 0,
            "value" : 3.5
        }
    },
    {
        "_id" : ObjectId("523715813fac8e36fdb0b96f"),
        "user" : "bruno2",
        "answers" : {
            "id" : 0,
            "value" : 0.5
        }
    }
]

根据您的要求,听起来好像永远不需要$ unwind甚至是聚合框架。相反,如果您要查找的文件的Answers.id等于0且Answers.value等于3.5,然后将answers.value更改为4,则可以将find与$ elemMatch一起使用,后跟db.collection.save():

doc = db.my_collection.findOne({"answers": {$elemMatch: {"id": 0, "value": 3.5}}});
for (i=0; i<doc.answers.length; i++) {
  if (doc.answers[i].id === 0) {
    doc.answers[i].value = 4;
    db.my_collection.save(doc);
    break;
  }
}

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在Mongodb中使用聚合对复杂条件进行排序

来自分类Dev

如何在mongoDB中使用聚合对对象数组进行排序

来自分类Dev

如何在mongoDB中使用聚合对对象数组进行排序

来自分类Dev

在mongodb中使用外部引用进行聚合

来自分类Dev

在MongoDB中使用对象数组进行聚合

来自分类Dev

使用MongoDB + Sails.js进行复杂排序

来自分类Dev

如何使用mongodb对$ group聚合输出进行排序

来自分类Dev

如何使用mongodb对$ group聚合输出进行排序

来自分类Dev

在Mongodb中使用聚合,查找和管道进行查询

来自分类Dev

在PHP中使用多个条件对数组进行排序

来自分类Dev

在Python中使用多个条件进行排序的问题

来自分类Dev

使用mongoose与Mongodb进行聚合

来自分类Dev

MongoDB Spring数据,复杂条件下的最大聚合

来自分类Dev

复杂的聚合命令MongoDB

来自分类Dev

如何在python中使用特定键值对复杂的json进行排序

来自分类Dev

在MongoDB聚合框架中使用多个字段按相关性排序

来自分类Dev

使用聚合在mongoDB中对每个组进行限制和排序

来自分类Dev

使用关联集合字段进行查找和排序的MongoDB聚合正在减慢查询速度

来自分类Dev

使用聚合对嵌套列进行排序

来自分类Dev

如何在MongoDB中使用条件进行投影?

来自分类Dev

MongoDb使用聚合时排序的问题

来自分类Dev

结果未使用聚合和MongoDB排序

来自分类Dev

在redshift中使用窗口功能有条件地进行聚合

来自分类Dev

在data.table中使用“或”进行有条件的按行聚合

来自分类Dev

在MongoDB中使用聚合框架按特定的嵌套字段值对文档进行计数

来自分类Dev

如何在Spring数据Mongodb中使用ArrayOperation的Size类进行聚合?

来自分类Dev

使用Awk进行条件排序或排序

来自分类Dev

Mongodb对复杂的JSON进行汇总,匹配,分组和排序

来自分类Dev

使用$ group管道进行条件聚合

Related 相关文章

  1. 1

    在Mongodb中使用聚合对复杂条件进行排序

  2. 2

    如何在mongoDB中使用聚合对对象数组进行排序

  3. 3

    如何在mongoDB中使用聚合对对象数组进行排序

  4. 4

    在mongodb中使用外部引用进行聚合

  5. 5

    在MongoDB中使用对象数组进行聚合

  6. 6

    使用MongoDB + Sails.js进行复杂排序

  7. 7

    如何使用mongodb对$ group聚合输出进行排序

  8. 8

    如何使用mongodb对$ group聚合输出进行排序

  9. 9

    在Mongodb中使用聚合,查找和管道进行查询

  10. 10

    在PHP中使用多个条件对数组进行排序

  11. 11

    在Python中使用多个条件进行排序的问题

  12. 12

    使用mongoose与Mongodb进行聚合

  13. 13

    MongoDB Spring数据,复杂条件下的最大聚合

  14. 14

    复杂的聚合命令MongoDB

  15. 15

    如何在python中使用特定键值对复杂的json进行排序

  16. 16

    在MongoDB聚合框架中使用多个字段按相关性排序

  17. 17

    使用聚合在mongoDB中对每个组进行限制和排序

  18. 18

    使用关联集合字段进行查找和排序的MongoDB聚合正在减慢查询速度

  19. 19

    使用聚合对嵌套列进行排序

  20. 20

    如何在MongoDB中使用条件进行投影?

  21. 21

    MongoDb使用聚合时排序的问题

  22. 22

    结果未使用聚合和MongoDB排序

  23. 23

    在redshift中使用窗口功能有条件地进行聚合

  24. 24

    在data.table中使用“或”进行有条件的按行聚合

  25. 25

    在MongoDB中使用聚合框架按特定的嵌套字段值对文档进行计数

  26. 26

    如何在Spring数据Mongodb中使用ArrayOperation的Size类进行聚合?

  27. 27

    使用Awk进行条件排序或排序

  28. 28

    Mongodb对复杂的JSON进行汇总,匹配,分组和排序

  29. 29

    使用$ group管道进行条件聚合

热门标签

归档