我是 mongoDB 的新手。也許這是一個簡單的問題。請幫我解決這個問題。
有 2 個表books 和bookStocks。
桌書
{
"_id" : "SHN-E3AE0DB3BC7D-4214-BDAE-59140DA1F850",
"nameOfBook" : "test",
"nameOfAuthor" : "test authou",
"yearOfPublication" : "1998",
"publication" : "test",
"edition" : "test",
"status" : "available",
"price" : "test",
"addedOn" : ISODate("2021-10-27T08:39:00.147 0000")
}
表書庫
{
"_id" : "SHNC-E1C6CF22A055-4A7E-AB79-CAEDC65AB29C",
"bookId" : "SHN-E3AE0DB3BC7D-4214-BDAE-59140DA1F850",
"collegeId" : "COL-D0E03FA4803F-4224-A321-1801626A9942",
"course" : "bcom",
"bookDetails" : "eeff",
"status" : "available",
"addedOn" : ISODate("2021-11-01T08:26:54.916 0000")
}
我將擁有的唯一價值是 CollegeId。這就是我需要的結果
[
{
"_id": "SHN-E3AE0DB3BC7D-4214-BDAE-59140DA1F850",
"nameOfBook": "test",
"nameOfAuthor": "test authou",
"yearOfPublication": "1998",
"publication": "test",
"status": "available",
"price": "test",
"addedOn": "2021-10-27T08:39:00.147Z",
"bookStocks": [
{
"_id": "SHNC-E1C6CF22A055-4A7E-AB79-CAEDC65AB29C",
"bookId": "SHN-E3AE0DB3BC7D-4214-BDAE-59140DA1F850",
"collegeId": "COL-D0E03FA4803F-4224-A321-1801626A9942",
"course": "bcom",
"bookDetails": "eeff",
"status": "available",
"addedOn": ISODate("2021-11-01T08:26:54.916 0000")
},
{
"_id": "SHNC-E1C6CF22A055-4A7E-AB79-CAEDC65AB29D",
"bookId": "SHN-E3AE0DB3BC7D-4214-BDAE-59140DA1F850",
"collegeId": "COL-D0E03FA4803F-4224-A321-1801626A9942",
"course": "bcom",
"bookDetails": "eeff",
"status": "available",
"addedOn": ISODate("2021-11-01T08:26:54.916 0000")
}
]
}
]
這是我正在嘗試的代碼
const pipeline = [
{ $match: { 'bookStocks.collegeId': collegeId } },
{
"$lookup": {
"from": "bookStocks",
let: {
bookId: "$bookId"
},
pipeline: [
{
$match: {
$expr: {
$eq: [
"$$bookId",
"$bookId"
]
}
}
}
],
"as": "bookStocks"
}
}
];
我確定這是不正確的。誰能幫我這個?提前致謝。
uj5u.com熱心網友回復:
您的查詢中有 2 個更正,
- 將
collegeId匹配條件移動到查找的管道匹配階段 $match通過檢查$ne條件放置一個階段來過濾空/不匹配的書籍
const pipeline = [
{
$lookup: {
from: "bookStocks",
let: { bookId: "$_id" },
pipeline: [
{
$match: {
$and: [
{ $expr: { $eq: ["$$bookId", "$bookId"] } },
{ collegeId: collegeId }
]
}
}
],
as: "bookStocks"
}
},
{ $match: { bookStocks: { $ne: [] } } }
];
操場
uj5u.com熱心網友回復:
你可以使用查找和匹配
db.books.aggregate([
{
"$lookup": {
"from": "bookStocks",
"localField": "_id",
"foreignField": "bookId",
"as": "bookStocks"
}
},
{
$match: {
"bookStocks.collegeId": "COL-D0E03FA4803F-4224-A321-1801626A9942"
}
},
])
https://mongoplayground.net/p/_jOZ1ZM-xgd
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/346628.html
標籤:数组 MongoDB 猫鼬 mongodb-查询 聚合框架
上一篇:按Jpa查詢的部分主鍵過濾
