所以我試圖聚合兩個匹配一個 id 的檔案,并基于第一個的值。
檔案1
{
“id”:3
“Whats for dinner”: “dinner”,
“What is for dinner tonight”: “dinner”,
“Whats for lunch”:“lunch”
}
檔案2
{
“Id”:3
“dinner” : “We are having roast!”,
“lunch” : “We are having sandwiches”
}
我想首先匹配 id 并測驗問題是否存在于 doc1 中。然后回傳來自 doc1 的問題和來自 doc 2 的答案。喜歡
{“Whats for dinner”:“We are having roast!”}
我試過了:
{ “$match”: { “id”: 3, “Whats for dinner”:{"$exists":True}} },
{
"$lookup": {
"from": "doc 2",
"localField": "id",
"foreignField": "id",
"as": "qa"
}
}
但是從這里我無法弄清楚如何使用 doc1 中的值作為 doc2 中的鍵
可能很簡單!但我是新來的,只是無法讓它作業!?
uj5u.com熱心網友回復:
瘋狂的資料模型!這將是一個解決方案:
db.doc1.aggregate([
{ $project: { data: { $objectToArray: "$$ROOT" } } },
{ $unwind: "$data" },
{
$lookup: {
from: "doc2",
pipeline: [
{ $project: { data: { $objectToArray: "$$ROOT" } } }
],
as: "answers"
}
},
{
$set: {
answers: {
$first: {
$filter: {
input: { $first: "$answers.data" },
cond: { $eq: [ "$$this.k", "$data.v" ] }
}
}
}
}
},
{ $match: { answers: { $exists: true } } },
{
$project: {
data: [
{
k: "$data.k",
v: "$answers.v"
}
]
}
},
{ $replaceWith: { $arrayToObject: "$data" } }
])
蒙戈游樂場
最好不要使用任何用戶資料作為鍵名,您將始終需要處理$objectToArray和$arrayToObject
也許考慮一下:
questions: {
guildid: 3,
text: [
"Whats for dinner",
"What is for dinner tonight",
"Whats for lunch"
],
"nospace": 1
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/396460.html
下一篇:恢復MongoDB副本集成員
