ฉันมีข้อมูลใน MongoDB โครงสร้างของวัตถุหนึ่งเป็นดังนี้:
{
"_id" : ObjectId("5395177980a6b1ccf916312c"),
"institutionId" : "831",
"currentObject" : {
"systemIdentifiers" : [
{
"value" : "24387",
"system" : "ABC"
}]
}
}
ฉันต้องรู้ว่ามีออบเจ็กต์กี่รายการที่มี institutionId และ systemIdentifiers[0].value เหมือนกัน และต้องการส่งคืนเฉพาะรายการที่ซ้ำกันในลักษณะนั้นเท่านั้น ในการทำเช่นนั้น ฉันจะจัดกลุ่มตามรหัสเหล่านี้และนับจำนวนครั้งที่เกิดขึ้น
ควรส่งคืนออบเจ็กต์ (คู่ของ ID) เมื่อ จำนวน มากกว่า 1
นี่คือโค้ดบางส่วนที่ทำการจัดกลุ่มโดยใช้ MapReduce
var map = function() {
var key = this.institutionId;
var val = this.currentObject.systemIdentifiers[0].value;
emit({"institutionId":key,"workId":val}, {count:1});
};
var reduce = function(key, values) {
var count = 0;
values.forEach(function(v) {
count += v['count'];
});
return {count: count};
}
db.name.mapReduce(map, reduce, {out: "grouped"})
db.grouped.find()
เพื่อให้ได้เฉพาะผู้ที่มีจำนวนมากกว่า 1 ฉันทำได้
db.grouped.aggregate([{$match:{"value.count":{$gt: 1}}}])
ผลลัพธ์ตัวอย่างดังต่อไปนี้
{
"_id" : {
"institutionId" : "1004",
"workId" : "591426"
},
"value" : {
"count" : 2
}
}
แต่ฉันอยากรู้ว่าถ้าเป็นไปได้ที่จะทำเพียงแค่ทำ MapReduce เป็นคำสั่งเดียวหรือไม่ เช่นการเพิ่ม ตัวสุดท้าย หรือมากกว่านั้น