假設我有以下兩個集合,sites和webpages。我試圖了解如何創建一個聚合,使我能夠結合sites集合中的一個檔案的值,并使用它來查詢webpages集合中的一個值。此外,我需要在組合的值前加上一個字串。
// sites collection。
[]。
{ "_id"/span> 。 3, "host" : "www. example-foo. com", "path"。 "/bar", "hasVisited": false },
]
//webpages collection
[]。
{ "_id"/span> 。 5, "url" : "https://www. example-foo.com/bar" },
{ "_id"/span> 。 8, "url" : "https://www. fizz.com/buzz" },
]
如果沒有聚合,我將做如下的事情。
const site = await db。 sites.findOne({ hasVisited: { $eq: false }. });
const pages = await db.webpages.find({
url: `https://${site.host}${site.path}`, // <--如何在查找聚合中構建這個? string value value)
});
// pages = [{ "_id" : 5, "url" : "https://www.example-foo.com/bar" }]/span>
uj5u.com熱心網友回復:
這就像翻譯你的代碼,使用$lookup
查詢
- 第一個findOne是
$match和$limit 1。
$seturl是用來做字串連接的 。
- 第二次查找是做
$lookup(與上述階段的1個網站) 。
*如果你想為1個以上的網站做這個作業,請取消限制,并預測更多的欄位,以了解這個頁面屬于哪個網站(哪個網站)
db.sites.aggregate( [
{
"$match"/span>: {
"hasVisited": {
"$eq": false。
}
}
},
{
"$limit": 1。
},
{
"$set": {
"url": {
"$concat": [
"https://"。
"$host",
"$path".
]
}
}
},
{
"$lookup": {
"from": "webpages",
"localField": "url",
"foreignField": "url",
"as": "pages"。
}
},
{
"$project": {
"_id": 0,
"pages": 1.
}
}
])
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/307940.html
標籤:
