Py学习  »  MongoDB

从array mongodb中查找前3个值

Shubham Singh • 4 年前 • 779 次点击  

这个问题已经有了答案:

我在下面的集合中有一个对象数组,具有我想要的级别 仅按级别降序排列数组的前三个级别

{
    "_id" : ObjectId("5ce10ffb0a9531d98ad11819"),
    "_course" : ObjectId("593107b273790c30c4e08b02"),
    "users" : [ 
        {
            "level" : 17,
            "_user" : ObjectId("5c08be10d1a0c91e4c739629")
        }, 
        {
            "level" : 16,
            "_user" : ObjectId("593107b273790c30c4e08b07")
        },
        {
            "level" : 5,
            "_user" : ObjectId("593107b273790c30c4e08b08")
        },
        {
            "level" : 17,
            "_user" : ObjectId("593107b273790c30c4e08b05")
        }
    ],
    "acr" : "MH"
}

/* 2 */
{
    "_id" : ObjectId("5ce10ffb0a9531d98ad1181a"),
    "_course" : ObjectId("593107b273790c30c4e08b02"),
    "users" : [ 
        {
            "level" : 9,
            "_user" : ObjectId("5c08be10d1a0c91e4c739629")
        }, 
        {
            "level" : 6,
            "_user" : ObjectId("593107b273790c30c4e08b02")
        },
        {
            "level" : 5,
            "_user" : ObjectId("593107b273790c30c4e08b07")
        },
        {
            "level" : 4,
            "_user" : ObjectId("593107b273790c30c4e08b07")
        }
    ],
    "acr" : "MA"
}

预期产量

  {
    "_id": "5ce10ffb0a9531d98ad11819",
    "users": [
      {
        "level": 17,
        "_user": "593107b273790c30c4e08b09"
      },
      {
        "level": 17,
        "_user": "593107b273790c30c4e08b05"
      },
      {
        "level": 16,
        "_user": "593107b273790c30c4e08b07"
      }
    ]
  },
  {
    "_id": "5ce10ffb0a9531d98ad11819",
    "users": [
      {
        "level": 9,
        "_user": "593107b273790c30c4e08b09"
      },
      {
        "level": 6,
        "_user": "593107b273790c30c4e08b02"
      },
      {
        "level": 5,
        "_user": "593107b273790c30c4e08b07"
      }
    ]
  }

我想要像上面那样的预期输出,我正在使用聚合,但是我找不到一种方法。我也用了其他的方法,但我仍然没有得到正确的输出,一些我找不到的东西丢失了。

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

您可以使用下面的聚合

db.collection.aggregate([
  { "$unwind": "$users" },
  { "$sort": { "users.level": -1 }},
  { "$group": {
    "_id": "$_id",
    "users": { "$push": "$users" }
  }},
  { "$addFields": { "users": { "$slice": ["$users", 3] }}}
])

MongoPlayground