0
私はドキュメントの一部を保存する方法を知りたいので、$ lookupメソッドが私に返します。ここに例があります:
eOTD_term
コレクションに省略形配列のみを保存するにはどうすればよいですか?
例:
私は2つのコレクションを持っています。 doc from eOTD_abbreviation
{
"_id" : ObjectId("59bc32fd7d7934a6a7a47d08"),
"abbreviationID" : "0161-1#AB-000282#1",
"termID" : "0161-1#TM-623205#1",
"abbreviation" : "CONSTR,LGHT"
}
ex。 eOTD_term
{
"_id" : ObjectId("59bc2d7e7d7934a6a7777540"),
"termID" : "0161-1#TM-623205#1",
"conceptID" : "0161-1#01-082401#1",
"term" : "CONSTRUCT,LIGHT",
}
termID
からのドキュメントは両方のコレクションに存在する私の一意のキーです。 (ドキュメントの1集約リターン)
db.eOTD_term.aggregate([
{
$lookup: {
from: "eOTD_abbreviation",
localField: "termID",
foreignField: "termID",
as: "abbreviation"
}
},
{
$match: { abbreviation: { $ne: [] } }
}
]);
そして、私は戻って取得::
は、私は、次の試してみました
{emphasized text
"_id" : ObjectId("59bc2d7e7d7934a6a7777540"),
"termID" : "0161-1#TM-623205#1",
"conceptID" : "0161-1#01-082401#1",
"term" : "CONSTRUCT,LIGHT",
"abbreviation" : [ <----------- THIS ARRAY
{
"_id" : ObjectId("59bc32fd7d7934a6a7a47d08"),
"abbreviationID" : "0161-1#AB-000282#1",
"termID" : "0161-1#TM-623205#1",
"abbreviation" : "CONSTR,LGHT"
}
]
}
単に置く '$が直接、次のunwind'' $のlookup'が冗長 '$のmatch'と多くを作ることに留意すべきである:
また、代わりにinsertManyの段階を「$をアウト」を使用して試すことができます[MongoDBが実際にその組み合わせを内部的にどのように処理するか](https://docs.mongodb.com/manual/core/aggregation-pipeline-optimization/#lookup-unwind-coalescence)のために効率的です。新しい "ルート"の '_id'値が一意でない場合には' $ out'は失敗しますが、一般的に "バッチ処理"要求なしで "すべて"の結果を '.insertMany()'に送る方が望ましいでしょう。 –