mongodb - 查询文档数组中引用的文档
问题描述
我有两个集合成员和书籍,其中一本书在成员集合中被引用到一组文档中,如下所示:
会员文件
{
name:"Michael Mason",
phone: "0754512542",
state: true,
penalties: 12.5,
activeBorrows: [
{
id_book: 10,
borrowDate: new Date(2021, 5, 15),
returnDate: new Date(2021, 6, 15),
},
{
id_book: 4,
borrowDate: new Date(2021, 5, 15),
returnDate: new Date(2021, 6, 30),
},
],
},
图书文件
{
_id: 10,
title: "C++ Programming Language",
isbn: "9780321563842",
authors: [
{
lastname: "Stroustrup",
firstname: "Bjarne ",
born: new Date(1973, 12, 26),
},
],
categories: ["software", "programare"],
published: 2013,
nrPages: 1368,
},
我想为会员提取他借阅的书籍的详细信息,例如名为“Michael Mason”的会员,以从图书收藏中打印 ID 为 10 和 4 的书籍的详细信息。这是我尝试过的,但它在“$in”命令中打印错误:
var member = db.members.find({"name":"Michael Mason"},{"activeBorrows":1},{$unwind:"$activeBorrows"})
var book = db.books.find({"_id":{"$in":member["activeBorrows"]}})
print(book);
我正在考虑这种方式或使用聚合,但我不知道该怎么做..
解决方案
您必须使用聚合
$match
获取特定文件$lookup
加入收藏
这是代码
db.Member.aggregate([
{ "$match": { name: "Michael Mason" } },
{
"$lookup": {
"from": "Book",
"localField": "activeBorrows.id_book",
"foreignField": "_id",
"as": "joinBooks"
}
}
])
工作Mongo游乐场
注意:名称不是唯一的,所以最好有任何唯一的 id
推荐阅读
- android - Android - 如果视图模型包含活动侦听器引用,会发生内存泄漏吗?
- javascript - 反应:作为道具的数组显示为未定义
- vb.net - 为什么将数据移动到文本字段时,索引超出了数组的范围
- azure - 为什么 AzureRmAks 在部署新的 Kubernetes 集群时找不到 SSH 密钥?
- salesforce - 如何在 Salesforce 中下载自定义对象的所有记录的所有附件?
- python - 有什么方法可以升级网络抓取?
- go - 错误 utils/math.go:128:1:语法错误:函数体外部的非声明语句
- html - 有没有办法在 Angular 8 中获取元素的位置?
- css - CSS(网格):在没有模板区域的情况下动态地在移动设备上重新排序 col 元素
- javascript - 语言和字符转换为英文键盘