gpt4 book ai didi

mongodb - 在 mongodb 的 $lookup 中应用条件

转载 作者:可可西里 更新时间:2023-11-01 10:10:00 26 4
gpt4 key购买 nike

我是 mongoDb 的新手。我已经设置了两个集合。 1) 书 2) 评论

book : 
_id
title
author
posted
price

评论是:

_id
bookId
comment
status

我想获取那些具有status = 1 的书的评论。

这个我试过了。

return new promise((resolve, reject) => {
db.collection('book').aggregate([
{
$lookup:{
from:'comments',
localField: "_id",
foreignField: "bookId",
as: "comments"
}
}
]).toArray().then((result) => {
if(result.length > 0){
res.send({ status: 1, message: "Success.", data:result });
}else{
res.send({ status: 0, message: "No data found." });
}
}).catch((err) => {
res.send({ status: 0, message: "Something went wrong."});
});
});

当我调用我的 API 时,我在 postman 中得到了它。

{
"status": 1,
"message": "Success.",
"data": [
{
"_id": "5bacad201bff841afb40791f",
"title": "Game of thrones",
"author": "John snow",
"posted": "16/07/1995",
"price": 1000,
"comments": [
{
"_id": "5bacc31aa2d365256cab31ce",
"bookId": "5bacad201bff841afb40791f",
"comment": "Winter is comming"
},
{
"_id": "5bacc3f65c716925df953615",
"bookId": "5bacad201bff841afb40791f",
"comment": "It has a level of politics"
},
{
"_id": "5bacd60ea38cc526f1fee1d1",
"bookId": "5bacad201bff841afb40791f",
"comment": "It has a level of politics",
"status": 1
}
]
},
{
"_id": "5bacad601bff841afb407920",
"title": "Breaking bed",
"author": "Haison burg",
"posted": "20/08/2002",
"price": 550,
"comments": []
}
]
}

我需要评论具有状态 1 值的数据。我尝试在 $lookup 之后使用 $match 但它不起作用。我也尝试过使用 $eq 这对我也不起作用。由于我刚刚开始学习 mongodb,所以可能我以错误的方式设置它。

最佳答案

来自 MongoDB v3.6.3之后,最快的查询性能将像这样实现:

确保您在 comments 集合中的 bookIdstatus 字段上有一个索引:

db.comments.createIndex({ "bookId": 1, "status": 1 })

然后使用 $lookup 阶段的新 pipeline 属性 ( documentation ):

db.books.aggregate([{
"$lookup": {
"from": "comments",
"let": { "bId": "$_id" },
"pipeline": [{
"$match": {
$expr: { $eq: [ "$bookId", "$$bId" ] },
"status": 1
}
}],
"as": "comments"
}
}])

关于mongodb - 在 mongodb 的 $lookup 中应用条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52550354/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com