Pertanyaan MongoDB mengurutkan berdasarkan jumlah subdocument


Saya memiliki dokumen yang terlihat seperti:

{
        "_id" : ObjectId("4e84f78b26d2046d5d00b5b2"),
        "parent_id" : 0,
        "ratings" : [
                "20716",
                "78167"
        ],
        "text" : "test"
}

Apakah mungkin untuk mengurutkan berdasarkan hitungan "peringkat"? Melakukan sesuatu seperti:

db.comments.find (). sort ({rating.count (): -1})

melempar kesalahan:

SyntaxError: hilang: setelah id properti (shell): 0


9
2017-09-30 17:15


asal


Jawaban:


Itu tidak mungkin langsung dengan mongodb [1]

Salah satu solusi, jika Anda sering menggunakan kueri ini, adalah dengan menambah dan mengurangi bidang 'hitungan' setiap kali Anda mengubah peringkat peringkat dan mengurutkan bidang itu.

Dokumen Anda akan terlihat seperti:

{
    "_id" : ObjectId("4e84f78b26d2046d5d00b5b2"),
    "parent_id" : 0,
    "ratings" : [
            "20716",
            "78167"
    ],
    count : 2
    "text" : "test"
}

dan Anda bertanya dengan

db.comments.find().sort({count: -1})

8
2017-10-01 13:41



Sudah ada jawaban yang sudah ditandai, tapi saya pikir saya akan menambahkan bahwa ini dapat dilakukan dengan menggunakan kerangka agregasi:

db.comments.aggregate( [
   { $unwind: "$ratings" },
   { $group : { _id : { parent_id: "$parent_id", text: "$text"  }, 
                ratingsCount : { $sum : 1 } } },
   { $sort : { ratingsCount : -1 } }
] )

17
2018-02-14 23:52