簡體   English   中英

我如何獲得(Node.js)具有不同值的MongoDB文檔,而其他值最低?

[英]How can I get (Node.js) MongoDB documents with a distinct value where some other value is the lowest?

我有一個這樣的收藏:

{
    name : 'a',
    value: 10,
    word : 'baz'
},
{
    name : 'a',
    value: 65,
    word : 'bar'
},
{
    name : 'a',
    value: 3,
    word : 'foo'
},
{
    name : 'b',
    value: 110,
    word : 'bar'
},
{
    name : 'b',
    value: 256,
    word : 'baz'
}

如何執行查詢以選擇name唯一且value最低的完整文檔? 例如:

{
    name : 'a',
    value: 3,
    word : 'foo'
},
{
    name : 'b',
    value: 110,
    word : 'bar'
}

您可以在aggregation framework使用$min運算符來實現所需的查詢,例如:

db.collection.aggregate([
    {$group:{_id:"$name", value:{$min:"$value"}}}, 
    {$limit:2}
])

該查詢將返回:

{
        "result" : [
                {
                        "_id" : "b",
                        "value" : 110
                },
                {
                        "_id" : "a",
                        "value" : 3
                }
        ],
        "ok" : 1
}

如果希望對結果進行排序,則還可以在管道中包括$sort階段。

編輯:您可以使用整潔的小技巧選擇$ group的_id字段中未包括的其他元素。 首先對文檔進行排序,然后使用$first運算符:

db.collection.aggregate([
    {$sort:{value:1}},
    {$group:{_id:"$name", value:{$min:"$value"}, word:{$first:"$word"}}} 
])

該查詢將返回:

{
        "result" : [
                {
                        "_id" : "b",
                        "value" : 110,
                        "word" : "bar"
                },
                {
                        "_id" : "a",
                        "value" : 3,
                        "word" : "foo"
                }
        ],
        "ok" : 1
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM