2012-04-23 27 views
15

cố gắng để nhóm theo ngày và sốđồ MongoDB giảm để có được uniques theo ngày/ngày

tài liệu của tôi

{ "_id" : ObjectId("4f956dee76ddb26752026e8f"), "request" : "default", "options" : "1", "keyword" : "somekey", "number" : "5b234b79-4d70-437e-8eef-32a2941af40a", "date" : "20120423200446", "time" : 1335193066 } 

truy vấn của tôi

map = "function() { var date = new Date(this.time * 1000); var key = date.getFullYear() + date.getMonth() + date.getDate(); emit({day : key, number: this.number}, {count: 1}); }" 

reduce = "function(key, values) { var count = 0; values.forEach(function(v) { count += v['count']; }); return {count: count}; }" 

db.txtweb.mapReduce(map, reduce, {out: "pageview_results"}); 

lỗi của tôi

uncaught exception: map reduce failed:{ "errmsg" : "ns doesn't exist", "ok" : 0 } 

Tôi không thể tìm ra whats wron g, nhưng tôi nghĩ nó làm gì đó với chức năng ngày tháng.

Mọi ý tưởng.

Trả lời

27

ns doesn't exist có nghĩa là bạn đang truy cập cơ sở dữ liệu hoặc bộ sưu tập không tồn tại. Kiểm tra tên của họ

Script dưới đây nhóm this.amount theo ngày (không có thời gian)

 db.payments.mapReduce(
      function() { 
       var k = new Date(this.payment_time); 
       k.setMinutes(0); 
       k.setSeconds(0); 
       k.setMilliseconds(0); 
       emit(k, this.amount); 
      }, 
      function (key, vals) { 
       var total = 0; 
       for (var i = 0; i < vals.length; i++) { 
        total += vals[i]; 
       } 
       return total; 
      }, 
      { 
       out : {merge : "resultName" } 
      } 
    ); 
    } 
}; 
+0

ns không tồn tại có nghĩa là bạn đang truy cập cơ sở dữ liệu hoặc bộ sưu tập không tồn tại. Kiểm tra tên của họ ... Đây là vấn đề. Cảm ơn – Anand

+0

Tôi nhận được lỗi dưới đây khi tôi cố gắng chạy nó trong lỗi nodejs: MongoError: ngoại lệ: bản đồ gọi không thành công: JS Error: ReferenceError: clone không được định nghĩa nofile_b: 1 – peter

+0

Có. Bản sao được sử dụng để tránh sửa đổi đối tượng ngày ban đầu. Tôi bỏ qua thực hiện chức năng sao chép. Bạn có thể sử dụng thay vào đó - ngày mới (this.getTime()); – Anton

5

Điều này xảy ra chủ yếu khi bạn chạy một kịch bản và quên để chọn cơ sở dữ liệu

use your_database_name; 

Note dòng để chọn cơ sở dữ liệu.

Các vấn đề liên quan