database - MongoDB - 查询嵌入式文档数组
问题描述
我最近开始使用MongoDB来保存项目中的数据,基本思路如下。
在服务器端,我在 WebSocket 上接收一些 JSON 对象并将其存储在数据库中。
我收到的数据如下所示:
{
{ident: "message_1"},
data:
[
{id: "data_1", value : 10},
{id: "data_2", value : 20},
{id: "data_3", value : 40},
{id: "data_4", value : 60},
{id: "data_4", value : 60},
],
timestamp : 12234456
}
我目前正在将整个 JSON 对象保存在数据库中。
服务器还应该处理用户的 http 请求,它会在数据库中查询请求的数据。用户请求总是针对 data
数组的一个元素和时间戳。因此,服务器响应应如下所示:
{ id: "data_1", value : 10, timestamp : 12234456}
我尝试将db.collection.find与$elemMatch一起使用,但我的输出仍然包含data
数组和所需的元素。
{
data:
[{
id: "data_1",
value: 10
}],
timestamp : 12234456
}
所以我的问题是是否有可能查询数据库并仅返回结合时间戳的“数据”数组的所需元素,或者我需要在读取数据库后重新创建响应 JSON 对象。
亲切的问候。
解决方案
欢迎来到 mongo 世界。您可以通过聚合轻松实现这一点
$uwnind
解构数组$match
得到期望值$addFields
向对象添加新字段$replaceRoot
使对象成为根
这是代码
db.collection.aggregate([
{ "$unwind": "$data" },
{ "$match": { "data.id": "data_1" } },
{ "$addFields": { "data.timestamp": "$timestamp" } },
{ "$replaceRoot": { "newRoot": "$data" } }
])
工作蒙戈游乐场
推荐阅读
- python - Django用户模型继承不起作用
- mongodb - Docker 注册层 mongo 失败
- powershell - 当用户存在于多个 DL 中时,powershell send-mailmessage 正在发送重复的电子邮件
- python - 如何使其成为导出员工信息的功能?
- r - R中的自定义字符串类型
- validation - 如何使用 Golang go-playground/validator 将验证链接在一起?
- java - 如何在 Spring 5 Xml 的 WebContentInterceptor 中设置 cacheControlMappings
- python-3.x - Pytesseract OCR
- sql - 如果不存在,则插入从先前查询中获取的行的表值
- python - WTForms:如何呈现 HTML5 小部件?