下面结构的数据记录,如何写 mongodb的 查询呢
查询 meta 下各字段的 timestampOccur,符合指定日期范围内的记录
{
"_id": {
"$oid": "648c3779213eb4a742966793"
},
"campaign": {
"$oid": "6486c919419fae8b33394653"
},
"status": "Enabled",
"workflow": {
"$oid": "6486c91d419fae8b33394659"
},
"user": {
"$oid": "64897fc8da355f8b0d629db5"
},
"basic": {
"email": "aaa@qq.com",
"salesTeam": "ahg",
"poc": "e",
"company": "厦谷"
},
"type": {
"3-nominated": "Y",
"event-attend": "Y"
},
"createdAt": {
"$date": "2023-06-16T10:20:41.421Z"
},
"updatedAt": {
"$date": "2023-06-19T10:18:02.329Z"
},
"tag": [],
"code": "enT7957116",
"meta": {
"aaa": { // 注意,这里的aaa,每条数据都不一样,随机的名称
"timestampOccur": [
{
"$date": "2023-06-19T10:18:02.000Z" // 这个是 Date 类型
}
]
},
"bbb": {
"timestampOccur": [
{
"$date": "2023-06-19T02:59:05.000Z"
}
]
}
}
}
关于,这个问题,我直接贴代码把,哈哈哈,敲了一中午
db.collection.aggregate([
// 匹配符合条件的记录
{
$match: {
"meta.timestampOccur": {
$elemMatch: {
$gte: ISODate("2023-06-18T00:00:00.000Z"),
$lt: ISODate("2023-06-20T00:00:00.000Z")
}
}
}
},
// 展开 meta 对象,方便后续操作
{
$project: {
_id: 1,
campaign: 1,
status: 1,
workflow: 1,
user: 1,
basic: 1,
type: 1,
createdAt: 1,
updatedAt: 1,
tag: 1,
code: 1,
meta: {
$objectToArray: "$meta"
}
}
},
// 将 meta 对象转换为数组,方便后续操作
{
$unwind: {
path: "$meta",
includeArrayIndex: "metaIndex"
}
},
// 如果 meta.timestampOccur 符合日期范围,则输出记录
{
$match: {
"meta.v.timestampOccur": {
$elemMatch: {
$gte: ISODate("2023-06-18T00:00:00.000Z"),
$lt: ISODate("2023-06-20T00:00:00.000Z")
}
}
}
},
// 重新构建 meta 对象
{
$group: {
_id: "$_id",
campaign: { $first: "$campaign" },
status: { $first: "$status" },
workflow: { $first: "$workflow" },
user: { $first: "$user" },
basic: { $first: "$basic" },
type: { $first: "$type" },
createdAt: { $first: "$createdAt" },
updatedAt: { $first: "$updatedAt" },
tag: { $first: "$tag" },
code: { $first: "$code" },
meta: {
$push: {
k: "$meta.k",
v: "$meta.v"
}
}
}
},
// 将 meta 对象转换回原始格式
{
$project: {
_id: 1,
campaign: 1,
status: 1,
workflow: 1,
user: 1,
basic: 1,
type: 1,
createdAt: 1,
updatedAt: 1,
tag: 1,
code: 1,
meta: {
$arrayToObject: "$meta"
}
}
}
])
代码注释未标明的地方及解释:match用于匹配符合日期范围内的记录,并将meta对象展开为数组;unwind 用于将 meta 对象转换为数组,方便后续操作;group用于重新构建meta对象;group用于重新构建meta对象;project 用于将 meta 对象转换回原始格式。
我自己写了个 utils 包,里面有一些浏览器和node端使用的方法,用exports指定了不同的入口文件 这个包在用到 umi 的项目时报错了,提示: 该怎么解决呢?
我一直在学习MongoDB在Spring Boot中的实现。然而,我遇到了复杂查询的问题。 对于如何从Spring Boot到MongoDB实现复杂查询,我找不到任何正确的解决方案。 null POJO类是bellow的 我想实现什么? 我想做一个查询,这将返回给我一个人,他的宠物有一个玩具(PetToy)与名称“泰迪”。 事先非常感谢。
问题内容: 表Words_Learned包含用户已知的所有单词以及 单词学习的顺序。它具有3列:1)单词ID和2)用户ID,以及3) 单词学习的顺序。 表中Article包含文章。它具有3列:1)文章ID,2) 唯一字数和3)文章内容。 该表Words包含每篇文章中包含的所有唯一单词的列表。 它有2列1)单词ID和2)文章ID 数据库图如下/ 在此处输入图片说明 您可以从此处下载数据库代码:htt
一个user有多个tel,是一对多的关系,现在我需要查询某个user,并且关联出tel的数量,上面的写法,user没有totalTel字段。 而改成getRawOne就有totalTel字段,但是其他字段都是数据库定义的下划线,而非驼峰的形式。 getOne应该怎么增加totalTel字段。
如图所示,上面的线height为1px,width为662px;下面4条线height为1px,width为7px,颜色都为#A7A7A7