【问题标题】:distinct with multiple fields and with where condition in mongodb在 mongodb 中与多个字段和 where 条件不同
【发布时间】:2014-05-31 22:20:37
【问题描述】:

我想在mongodb 中编写一个等效于distinctwhere 的查询。 sql查询是select DISTINCT key,score from GPC where note="test2" and notetwo = "meet2"

{ "_id" : ObjectId("4dc86fef6a0aa8513ab5f21c"), "key" : "SAGAR","score" : 16, "note" : "test1", "notetwo" : "meet1" } 
{ "_id" : ObjectId("4dc86ffd6a0aa8513ab5f21d"), "key" : "SAGAR456", "score" : 17, "note" : "testjh1", "notetwo" : "meetjh1" } 
{ "_id" : ObjectId("4dc8700b6a0aa8513ab5f21e"), "key" : "SAGAR33", "score" : 37, "note" : "test2", "notetwo" : "meet2" } 
{ "_id" : ObjectId("4dc871686a0aa8513ab5f21f"), "key" : "SAGAR33", "score" : 37, "note" : "test2", "notetwo" : "meet2" } 
{ "_id" : ObjectId("4dc871696a0aa8513ab5f220"), "key" : "SAGAR33", "score" : 37, "note" : "test2", "notetwo" : "meet2" } 
{ "_id" : ObjectId("4dc8716c6a0aa8513ab5f221"), "key" : "SAGAR456", "score" : 17, "note" : "testjh1", "notetwo" : "meetjh1" } 

查询的预期结果是

[{"key" : "SAGAR33", "score" : 37}]

mongodb 中的等效查询是什么。我正在使用猫鼬来执行查询。

【问题讨论】:

    标签: node.js mongodb mongoose


    【解决方案1】:

    您需要使用aggregate 查询来实现此目的。这是一个可以在 shell 中工作的例子(可以很容易地翻译成 Mongoose):

    db.gpc.aggregate([
        // your where clause: note="test2" and notetwo = "meet2"
        {"$match" : {note:"test2", notetwo:"meet2"}}, 
        // group by key, score to get distinct
        {"$group" : {_id : {key:"$key", score:"$score"}}}, 
        // Clean up the output
        {"$project" : {_id:0, key:"$_id.key", score:"$_id.score"}}
    ])
    

    输出:

    { "result" : [ { "key" : "SAGAR33", "score" : 37 } ], "ok" : 1 }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多