2017-09-22 4 views
3

私はMongoDBバージョン2.6.10を使用します。以下はコレクションの構造です。私は()秒を除く(作成に基づいて、ユーザーの名前のグループにMapReduceの機能を使用して、EVENT_NAME。以下mongodb mapreduce関数がドキュメントの計算値をマッパーとして受け入れるかどうか

{ 
    "_id" : ObjectId("59c11d79078dc54153c36ee8"), 
    "event_name" : "notification", 
    "created" : ISODate("2017-09-19T13:36:57.252Z"), 
    "sender_name" : "nathan", 
    "user_name": "Ragul"", 
} 
{ 
    "_id" : ObjectId("59c11d79078dc54153c36eeb"), 
    "event_name" : "notification", 
    "created" : ISODate("2017-09-19T13:36:57.772Z"), 
    "sender_name" : "parmesh", 
    "user_name": "Ram", 
} 
{ 
    "_id" : ObjectId("59c11d7a078dc54153c36ef0"), 
    "event_name" : "notification", 
    "created" : ISODate("2017-09-19T13:36:58.554Z"), 
    "sender_name" : "nathan", 
    "user_name": "Ram", 

} 
{ 
    "_id" : ObjectId("59c11d7a078dc54153c36ef1"), 
    "event_name" : "message", 
    "created" : ISODate("2017-09-19T13:36:58.577Z"), 
    "sender_name" : "nathan", 
    "user_name": "Ragul"", 
} 

MapReduceの機能を使用して、私のクエリです。私の質問は、私たちがマッパーとして計算された日付を使用できるかどうかであります。ご提案ここで

var mapfn = function(){ 
    if (this.event_name == "message"){ 
     name = this.recipient_name 
    } 
    else if ((this.event_name == "notification") && (this.other_status == true)){ 
     name = this.sender_name 
    } 
    else if ((this.event_name == "notification") && (this.other_status == false)){ 
     name = "You" 
    } 
    this.cre = {$subtract:[this.created,{$add:[{$multiply:[{$second:this.created},1000]},{$millisecond:this.created}]}]} 
    emit({"event_name": this.event_name, "created": this.cre}, name) 
} 

var redfun = function(key, value){ 
    return Array.append(value) 
} 

db.getCollection('users').mapReduce(mapfn, redfun, {out: "example"}).find() 

答えて

0

代わりにMongoDBの式を使用して日付を計算することで私を助けて、私は秒を排除するためにJavaScriptを使用してみましたし、私はその働いた。

をマッピングされました210
var mapfn = function(){ 
    if (this.event_name == "message"){ 
     name = this.recipient_name 
    } 
    else if ((this.event_name == "notification") && (this.other_status == true)){ 
     name = this.sender_name 
    } 
    else if ((this.event_name == "notification") && (this.other_status == false)){ 
     name = "You" 
    } 
    this.created.setSeconds(0); 
    this.created.setMilliseconds(0); 
    emit({"event_name": this.event_name, "created": this.created}, name) 
} 

var redfun = function(key, value){ 
    var names = value.join(",") 
    return names 
} 

db.users.mapReduce(mapfn, redfun, {out: "example"}).find() 
関連する問題