Py学习  »  MongoDB

Mongodb排序问题

Soubhagya Pradhan • 4 年前 • 876 次点击  

我的mongodb收藏:

  [{
    "_id" : ObjectId("5dd6598d55396f36052e347d"),
    "isActive" : true,
    "myarray" : [
        {
            "my_id" : "5d967d08821b4031a197b002",
            "name" : "jack"
        },
        {
            "my_id" : "5d967d2c821b4031a197b003",
            "name" : "manison"
        }
    ]
  },
  {
    "_id" : ObjectId("5dd6598d55396f36052e347d"),
    "isActive" : true,
    "myarray" : [
        {
            "my_id" : "5d967d08821b4031a197b002",
            "name" : "penelope"
        },
        {
            "my_id" : "5d967d2c821b4031a197b003",
            "name" : "cruz"
        }
    ]
  }]

这里我试着根据名字排序。 不应在数组内部排序,而应在外部排序。

预期结果如下

[{
  "_id" : ObjectId("5dd6598d55396f36052e347d"),
  "isActive" : true,
  "myarray" : [
    {
      "my_id" : "5d967d08821b4031a197b002",
      "name" : "penelope"
    },
    {
      "my_id" : "5d967d2c821b4031a197b003",
      "name" : "cruz"
    }
  ]
},{
  "_id" : ObjectId("5dd6598d55396f36052e347d"),
  "isActive" : true,
  "myarray" : [
    {
      "my_id" : "5d967d08821b4031a197b002",
      "name" : "jack"
    },
    {
      "my_id" : "5d967d2c821b4031a197b003",
      "name" : "manison"
    }
  ]
}]

“name”:“cruz”排在第一位,因为字母C比J和M(在第二个json中)来得快

而Prenelop和cruz并没有仅仅切换主文档json,而是按照名称顺序进行切换

我正在使用的查询

db.traffic.aggregate([
  {$unwind: "$customFieldArray"}, 
  {$sort: {"customFieldArray.field_value":1}}, 
  {$group: {_id:"$_id", customFieldArray: {$push:"$customFieldArray"}}}
]);

但它在内部排序就像把克鲁兹带到佩内洛普,反之亦然。

主json保持稳定。

请看一下

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/52109
 
876 次点击  
文章 [ 1 ]  |  最新文章 4 年前
Ashh
Reply   •   1 楼
Ashh    4 年前

你可以用简单的 find 查询 sort 光标

db.traffic.find({}).sort({ "myarray.name": -1 })

docs

对于数组,小于比较或升序排序比较 数组的最小元素,大于比较或 降序排序比较数组中最大的元素。