これは、カスタム書式設定をしたい非常に特殊なケースですので、あなたの最善の策は、MongoDBのの機能をマップ削減になります。しかし、このフォーマットは集約フレームワークの助けを借りて達成することもできます。私は両方のソリューションを追加しています。
集約フレームワーク:
db.collection.aggregate([
{
$group:{
_id:null,
origin:{
$addToSet:"$_id.origin"
},
destination:{
$addToSet:"$_id.destination"
}
}},
{
$project:{
_id:0,
Nodes:{
$setUnion:["$origin","$destination"]
}
}}
])
出力:
{
"Nodes" : [
"yy",
"yx",
"xx",
"bb",
"aa",
"xy"
]
}
地図削減:
db.collection.mapReduce(
function() {
emit(1, this._id);
},
function (key, values) {
var o = {};
o.Nodes = [];
for (var i = 0; i < values.length; i++) {
o.Nodes.push(values[i].origin);
o.Nodes.push(values[i].destination);
}
return o;
},
{
out: { inline: 1 }
});
出力:
{
"results" : [
{
"_id" : NumberInt(1),
"value" : {
"Nodes" : [
"xx",
"yy",
"aa",
"bb",
"xy",
"yx"
]
}
}
],
"timeMillis" : NumberInt(22),
"counts" : {
"input" : NumberInt(3),
"emit" : NumberInt(3),
"reduce" : NumberInt(1),
"output" : NumberInt(1)
},
"ok" : NumberInt(1)
}
results.values.Nodes
ご希望の結果が含まれています。
質問を更新し、サンプルのMongoDBドキュメントでサポートしてください。完全な情報を持っていなくても良い解決策を見つけ出すのは難しいです。 – Saleem
サンプルで質問を更新しました。 'db.test.aggregate( { $グループ::{ _id: "$原点"、 }、 $グループ:{ _id: "$先"、 }私はこれを行うとき はあなたに – MAYA