mongodb - 操作数据并加入 mongodb
问题描述
我对 Mongodb 比较陌生,我需要执行以下操作:
我有 2 个表,“记录”和“文件”。
“记录”表中的一行如下所示:
{ "_id" : ObjectId("6012d31aea8fb06d8bf438a0"), "img" : false, "type" : "DRAFT", "submitted" : true }
“文件”表中的一行如下所示:
{ "_id" : ObjectId("5fabf23f917863623ec54a86"), "filename" : "6012d31aea8fb06d8bf438a0", "uploadDate" : ISODate("2020-11-11T14:16:31.462Z"), "length" : NumberLong(4119) }
“files”表中的“filename”字段对应于“records”表中的_id字段。
如何在“记录”表中找到文件名不是 id 的所有“文件”?
谢谢!
编辑:*我使用的是 Mongo 3.6 版*
解决方案
- 转换
filename
为ObjectId
. - 使用and执行
$lookup
(或加入)操作。filename
_id
- 保留为空
records
(这意味着records
集合没有该文件的条目)。
试试这个查询:
db.files.aggregate([
{
$lookup: {
from: "records",
let: { file_id: { $toObjectId: "$filename" } },
pipeline: [
{
$match: {
$expr: { $eq: ["$_id", "$$file_id"] }
}
}
],
as: "records"
}
},
{
$match: {
$expr: {
$eq: [{ $size: "$records" }, 0]
}
}
}
])
推荐阅读
- c# - 在c#中旋转图像
- php - 带重音符号的 PHP json_decode() 不起作用
- javascript - 如何获取在 Javascript 中按下的按钮的名称?
- c# - 如何使用多个参数调用测试方法(NUnit)
- linux - Bash:如何注销/退出运行脚本的用户
- mysql - 无法在我的程序中运行查询
- php - PHP strtotime():转换后显示“1970-01-01”的日期
- docker - 如何告诉 docker 在备用端口中使用 DNS 服务器
- javascript - 如何在 Javascript 中插入 HTML 表格?
- angular - 角度中不存在错误属性