gpt4 book ai didi

mongodb - $lookup 当 foreignField 在嵌套数组中时

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

我有两个系列:

学生

 {    
_id: ObjectId("657..."),
name:'abc'
},
{
_id: ObjectId("593..."),
name:'xyz'
}

图书馆

 {    
_id: ObjectId("987..."),
book_name:'book1',
issued_to: [
{
student: ObjectId("657...")
},
{
student: ObjectId("658...")
}
]
},
{
_id: ObjectId("898..."),
book_name:'book2',
issued_to: [
{
student: ObjectId("593...")
},
{
student: ObjectId("594...")
}
]
}

我想加入 Student 集合,该集合存在于 Library 集合的对象字段的 issued_to 数组中。

我想查询学生集合以获取学生数据以及图书馆集合中的数据,如果学生存在或不存在,将检查 issued_to 数组,如果存在则获取图书馆文档,否则不获取。我尝试了 mongo 3.6 的 $lookup 但我没有成功。

db.student.aggregate([{$match:{_id: ObjectId("593...")}}, $lookup: {from: 'library', let: {stu_id:'$_id'}, pipeline:[$match:{$expr: {$and:[{"$hotlist.clientEngagement": "$$stu_id"]}}]}])

但是出现错误请帮助我解决这个问题。我还查看了在 stackoverflow 上提出的其他问题,例如。 question on stackoverflow , question2 on stackoverflow但这些是比较简单的字段而不是对象数组。请帮助我

最佳答案

我不确定我是否完全理解您的问题,但这应该对您有所帮助:

db.student.aggregate([{
$match: { _id: ObjectId("657...") }
}, {
$lookup: {
from: 'library',
localField: '_id' ,
foreignField: 'issued_to.student',
as: 'result'
}
}])

如果您只想获取每个学生的所有 book_name,您可以这样做:

db.student.aggregate([{
$match: { _id: ObjectId("657657657657657657657657") }
}, {
$lookup: {
from: 'library',
let: { 'stu_id': '$_id' },
pipeline: [{
$unwind: '$issued_to' // $expr cannot digest arrays so we need to unwind which hurts performance...
}, {
$match: { $expr: { $eq: [ '$issued_to.student', '$$stu_id' ] } }
}, {
$project: { _id: 0, "book_name": 1 } // only include the book_name field
}],
as: 'result'
}
}])

关于mongodb - $lookup 当 foreignField 在嵌套数组中时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50911196/

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