私は、次の文書構造を持つ2つのコレクションがあります。 コメント集:コレクションをマージして同じドキュメントスキーマを取得するにはどうすればよいですか?
{
"_id" : ObjectId("59bab6c6d41dce6422af08cd"),
"userId" : 12345.0,
"comment" : "Hey, what's up?",
"created" : ISODate("2017-09-14T17:05:10.820+0000")
}
{
"_id" : ObjectId("59bab6c6d41dce6422af08ce"),
"userId" : 123456.0,
"comment" : "Not much",
"created" : ISODate("2017-09-14T17:05:10.855+0000")
}
{
"_id" : ObjectId("59bab6c6d41dce6422af08cf"),
"userId" : 12345678.0,
"comment" : "Cool",
"created" : ISODate("2017-09-14T17:05:10.889+0000")
}
{
"_id" : ObjectId("59bab6c6d41dce6422af08d0"),
"userId" : 12.0,
"comment" : "Nothing",
"created" : ISODate("2017-09-14T17:05:10.931+0000")
}
ユーザーコレクション:
{
"_id" : ObjectId("59bab74cd41dce6422af08d1"),
"unique_Id" : 12345.0,
"firstName" : "Rich",
"lastName" : "S",
"gender" : "M",
"country" : "CA",
"age" : "18"
}
{
"_id" : ObjectId("59bab74cd41dce6422af08d2"),
"unique_Id" : 123456.0,
"firstName" : "Rob",
"lastName" : "M",
"gender" : "M",
"country" : "US",
"age" : "25"
}
{
"_id" : ObjectId("59bab74cd41dce6422af08d3"),
"unique_Id" : 12345.0,
"firstName" : "Sarah",
"lastName" : "T",
"gender" : "F",
"country" : "US",
"age" : "13"
}
を私はそれらを結合し、同じ文書スキーマは、後に参加従うためにそれらを必要とすることを試みました。 私は
db.getCollection('users').aggregate([
{
$lookup: {
from: "comments",
localField: "unique_Id",
foreignField: "userId",
as: "goldStandard"
}
},
{ $out : "test2"}
])
出力ました:今
{
"_id" : ObjectId("59bab74cd41dce6422af08d1"),
"unique_Id" : 12345.0,
"firstName" : "Rich",
"lastName" : "S",
"gender" : "M",
"country" : "CA",
"age" : "18",
"goldStandard" : [
{
"_id" : ObjectId("59bab6c6d41dce6422af08cd"),
"userId" : 12345.0,
"comment" : "Hey, what's up?",
"created" : ISODate("2017-09-14T17:05:10.820+0000")
}
]
}
{
"_id" : ObjectId("59bab74cd41dce6422af08d2"),
"unique_Id" : 123456.0,
"firstName" : "Rob",
"lastName" : "M",
"gender" : "M",
"country" : "US",
"age" : "25",
"goldStandard" : [
{
"_id" : ObjectId("59bab6c6d41dce6422af08ce"),
"userId" : 123456.0,
"comment" : "Not much",
"created" : ISODate("2017-09-14T17:05:10.855+0000")
}
]
}
{
"_id" : ObjectId("59bab74cd41dce6422af08d3"),
"unique_Id" : 12345.0,
"firstName" : "Sarah",
"lastName" : "T",
"gender" : "F",
"country" : "US",
"age" : "13",
"goldStandard" : [
{
"_id" : ObjectId("59bab6c6d41dce6422af08cd"),
"userId" : 12345.0,
"comment" : "Hey, what's up?",
"created" : ISODate("2017-09-14T17:05:10.820+0000")
}
]
}
を、コレクションの文書「からは、」配列型のフィールド名「として」下のオブジェクトとして追加されます。 $ unwindを使って配列を巻き戻すと、オブジェクトとして与えられます。私はオブジェクトとしてなりたくありません。代わりに、最終文書が結合後に次の構造を持つようにします。$ lookup &共通の列の条件が一致するフィールドを組み合わせて、重複するフィールドを避ける必要があります。新しいフィールドが新しいドキュメントに追加されます。例:
{
"_id" : ObjectId("59bab74cd41dce6422af08d1"),
"unique_Id" : 12345.0,
"firstName" : "Rich",
"lastName" : "S",
"gender" : "M",
"country" : "CA",
"age" : "18",
"comment" : "Hey, what's up?",
"created" : ISODate("2017-09-14T17:05:10.820+0000")
}
{
"_id" : ObjectId("59bab74cd41dce6422af08d2"),
"unique_Id" : 123456.0,
"firstName" : "Rob",
"lastName" : "M",
"gender" : "M",
"country" : "US",
"age" : "25",
"comment" : "Not much",
"created" : ISODate("2017-09-14T17:05:10.855+0000")
}
{
"_id" : ObjectId("59bab74cd41dce6422af08d3"),
"unique_Id" : 12345.0,
"firstName" : "Sarah",
"lastName" : "T",
"gender" : "F",
"country" : "US",
"age" : "13",
"comment" : "Hey, what's up?",
"created" : ISODate("2017-09-14T17:05:10.820+0000")
}
お勧めします。
ような何かそれは集計演算子を使用して可能である[$ mergeObject](https://docs.mongodb.com/master/reference/operator/aggregation/mergeObjects/#definitionに)それは今後の3.6リリースになります。それがあなたのオプションであるかどうかは確かではありません。 – Veeram