2017-02-26 65 views
0

特別是與美元開始在system.profile字段名/組 - >updateobj.$set如何投射,使用聚合

鑑於格式的文檔:

db.system.profile.findOne({op: "update", ns: "zz.top", upsert: true}) 
{ 
    "_id" : ObjectId("589c6bf4be7acf4c5b8a4cb4"), 
    "op" : "update", 
    "ns" : "zz.top", 
    "query" : { 
      "ts" : ISODate("2017-02-07T16:08:01Z"), 
      "user" : 22464 
    }, 
    "updateobj" : { 
      "$set" : { 
        "version" : "2.0.4", 
        ... 
      } 
    } 
    ... 
} 

我想找到(簡化的情況下,對於我的問題)所有具有重複版本的文檔。

的東西,如:

db.system.profile.aggregate(
    {$match: {op: "update", ns: "zz.top", upsert: true}}, 
    {$group: {_id : {uid : "$updateobj.$set.version"}, count: {$sum : 1}}}, 
    {$match: {count : {$gt : 1}}} 
) 

或:

db.system.profile.aggregate(
    {$match: {op: "update", ns: "zz.top", upsert: true}}, 
    {$project: {"v" : "$updateobj.$set.version"}}, 
    {$group: {_id : "$v", count: {$sum : 1}}}, 
    {$match: {count : {$gt : 1}}} 
) 

笨拙,我一直在掙扎。

回答

2

不幸的是,目前這是不可能的。

要查詢此信息,您需要讀出配置文件集合,將美元符號清理到其他集合,然後將其保存到另一個集合。

下面是2013年打開的相應錯誤:https://jira.mongodb.org/browse/SERVER-8436