Mongodb 如何在数组字段中对子文档进行排序?

Mongodb 如何在数组字段中对子文档进行排序?,mongodb,mongodb-query,pymongo,aggregation-framework,Mongodb,Mongodb Query,Pymongo,Aggregation Framework,我正在使用MongoDB shell获取一些结果,ordered。这是一个取样器 { "_id" : "32022", "topics" : [ { "weight" : 281.58551703724993, "words" : "some words" }, { "weight" : 286.6695125796183, "words" : "some more words" }, {

我正在使用MongoDB shell获取一些结果,ordered。这是一个取样器

{
"_id" : "32022",
"topics" : [
    {
        "weight" : 281.58551703724993,
        "words" : "some words"
    },
    {
        "weight" : 286.6695125796183,
        "words" : "some more words"
    },
    {
        "weight" : 289.8354232846977,
        "words" : "wowz even more wordz"
    },
    {
        "weight" : 305.70093587160807,
        "words" : "WORDZ"
    }]
}
我想得到的是相同的结构,但按主题排序:[]

{
"_id" : "32022",
"topics" : [
    {
        "weight" : 305.70093587160807,
        "words" : "WORDZ"
    },
    {
        "weight" : 289.8354232846977,
        "words" : "wowz even more wordz"
    },
    {
        "weight" : 286.6695125796183,
        "words" : "some more words"
    },
    {
        "weight" : 281.58551703724993,
        "words" : "some words"
    },
    ]
}

我设法得到了一些有序的结果,但没有运气按id字段对它们进行分组。有什么方法可以做到这一点吗?

MongoDB没有提供现成的方法,但有一种解决方法,可以更新文档并使用update操作符对数组进行排序

db.collection.update_many({},{“$push”:{“topics”:{“$each”:[],“$sort”:{“weight”:-1}})
您仍然可以像这样使用
.aggregate()
方法:

db.collection.aggregate([
{“$unwind”:“$topics”},
{“$sort”:{“_id”:1,“topics.weight”:-1},
{“$group”:{“\u id”:“$\u id”,“主题”:{“$push”:“$topics”}}
])
但如果您只想对数组进行排序,那么这种方法的效率就会降低,而且您绝对不应该这样做



您始终可以使用or函数在客户端执行此操作。

如果您不想更新,而只想获取文档,则可以使用以下查询

 db.test.aggregate(
 [
   {$unwind : "$topics"},
   {$sort : {"topics.weight":-1}},
   {"$group": {"_id": "$_id", "topics": {"$push": "$topics"}}}
 ]
)
这对我很有用:

db.getCollection('mycollection').aggregate(
{$project:{topics:1}},
{$unwind:"$topics"},
{$sort :{"topics.words":1}})

您需要向我们展示具有预期结果的示例文档,而不仅仅是您得到的结果。@user3100115检查更新的问题这是错误的,它不会给出预期结果。添加管道参数的
{“$match”:{“\u id”:“12345”},
,正好说出了我想要的结果@贝迪,你有没有注意到这是我答案的副本,对现有答案没有任何价值?