私は以下の理由で困惑しています。誰でも説明できますか? 状況によっては、私の目標は、回答が質問とは別のコレクションに保存されている調査データベースの回答オプションに関連するスコアを取得することです。質問コレクションには、回答オプションの配列が含まれています。これらの回答オプションにはスコアがあります。このクエリを実行するMongoDB集約パイプラインマッチ - >ルックアップ - >アンワインド - >マッチ問題
:
db.answers.aggregate([
{
$match: {
userId: "abc",
questionId: ObjectId("598be01d4efd70a81c1c5ad4")
}
},
{
$lookup: {
from: "questions",
localField: "questionId",
foreignField: "_id",
as: "question"
}
},
{
$unwind: "$question"
},
{
$unwind: "$question.options"
},
{
$unwind: "$answers"
}
])
私が取得:
{
"_id" : ObjectId("598e588e0c5e24452c9ee769"),
"userId" : "abc",
"questionId" : ObjectId("598be01d4efd70a81c1c5ad4"),
"answers" : {
"id" : 20
},
"question" : {
"_id" : ObjectId("598be01d4efd70a81c1c5ad4"),
"options" : {
"id" : 10,
"score" : "12"
}
}
}
{
"_id" : ObjectId("598e588e0c5e24452c9ee769"),
"userId" : "abc",
"questionId" : ObjectId("598be01d4efd70a81c1c5ad4"),
"answers" : {
"id" : 20
},
"question" : {
"_id" : ObjectId("598be01d4efd70a81c1c5ad4"),
"options" : {
"id" : 20,
"score" : "4"
}
}
}
すべて素晴らしいです。私は今、元のクエリに対する回答(例えばquestions.options.id == answers.id
と同じIDを持つ解答選択肢を見つけることになって試合を追加すると、物事は私が期待するように動作しません
最終パイプラインは次のとおりです。
これは、空の結果を返します。しかし、私は"$answers.id"
から20
に$match
のRHSを変更した場合、それは期待score: 4
を返します。私は、私は考えることができるすべてを試してみましたが、それは仕事を得ることではないとすることはできませんでしたそれがうまくいかない理由を理解してください。