database - mongo 查询 - 从对象数组中获取特定对象(它的 `_id` 是已知的)但是这个数组也是文档列表的一部分
问题描述
鉴于我有它的_id
--> 即消息 ID,我如何查询以从收件箱或发件箱中获取特定消息。
this is my route
get("/getSpecificMessage/{Message_id}", (req, res) => {..}
我能做的是找到所有买家/经销商,然后通过所有买家/经销商的收件箱/发件箱,然后找到带有_id
ie message_id 的消息-> 我能做得更好吗?
{
"_id" : ObjectId("5b8f0f4de276dd1e0ff083e1"),
"address" : {
"proper_address" : "sarai kale khan",
"lat" : 28.58894,
"long" : "77.25692"
},
"name" : "prashant",
"password" : "jfalksdjlk;jasdl",
"email" : "prashant@gmail.com",
"inbox" : [
{
"_id" : ObjectId("5b8f0f4de276dd1e0ff083e4"),
"date" : ISODate("2018-09-04T23:03:41.627Z"),
"from" : "1@1.com",
"message" : "message_1"
},
{
"_id" : ObjectId("5b8f0f4de276dd1e0ff083e3"),
"date" : ISODate("2018-09-04T23:03:41.627Z"),
"from" : "2@2.com",
"message" : "message_2"
},
{
"_id" : ObjectId("5b8f0f4de276dd1e0ff083e2"),
"date" : ISODate("2018-09-04T23:03:41.627Z"),
"from" : "3@3.com",
"message" : "message_3"
}
],
"outbox" : [
{
"_id" : ObjectId("5b8f0f4de276dd1e0ff083e7"),
"date" : ISODate("2018-09-04T23:03:41.627Z"),
"to" : "1@1.com",
"message" : "message_4"
},
{
"_id" : ObjectId("5b8f0f4de276dd1e0ff083e6"),
"date" : ISODate("2018-09-04T23:03:41.627Z"),
"to" : "1@1.com",
"message" : "message_5"
},
{
"_id" : ObjectId("5b8f0f4de276dd1e0ff083e5"),
"date" : ISODate("2018-09-04T23:03:41.627Z"),
"to" : "1@1.com",
"message" : "message_6"
}
],
"__v" : 0
}
{
"_id" : ObjectId("5b8f0f4de276dd1e0ff083e8"),
"address" : {
"proper_address" : "najafgarah",
"lat" : 28.58894,
"long" : "77.25692"
},
"name" : "rahul",
"password" : "jkalsjdflasdl",
"email" : "rahul@gmail.com",
"inbox" : [
{
"_id" : ObjectId("5b8f0f4de276dd1e0ff083eb"),
"date" : ISODate("2018-09-04T23:03:41.639Z"),
"from" : "1@1.com",
"message" : "message_1"
},
{
"_id" : ObjectId("5b8f0f4de276dd1e0ff083ea"),
"date" : ISODate("2018-09-04T23:03:41.639Z"),
"from" : "2@2.com",
"message" : "message_2"
},
{
"_id" : ObjectId("5b8f0f4de276dd1e0ff083e9"),
"date" : ISODate("2018-09-04T23:03:41.639Z"),
"from" : "3@3.com",
"message" : "message_3"
}
],
"outbox" : [
{
"_id" : ObjectId("5b8f0f4de276dd1e0ff083ee"),
"date" : ISODate("2018-09-04T23:03:41.639Z"),
"to" : "1@1.com",
"message" : "message_4"
},
{
"_id" : ObjectId("5b8f0f4de276dd1e0ff083ed"),
"date" : ISODate("2018-09-04T23:03:41.639Z"),
"to" : "1@1.com",
"message" : "message_5"
},
{
"_id" : ObjectId("5b8f0f4de276dd1e0ff083ec"),
"date" : ISODate("2018-09-04T23:03:41.639Z"),
"to" : "1@1.com",
"message" : "message_6"
}
],
"__v" : 0
}
所以如果我有_id = 5b8f0f4de276dd1e0ff083ea
并且我想要
{
"_id" : ObjectId("5b8f0f4de276dd1e0ff083ea"),
"date" : ISODate("2018-09-04T23:03:41.639Z"),
"from" : "2@2.com",
"message" : "message_2"
}
解决方案
我不确定您是否希望使用 MongoDB 脚本或您的应用程序语言(如果我弄错了 Nodejs)
这就是它在 Mongo Shell 脚本上的工作方式
db.MODEL.find( { _id: DOCUMENT_ID },
{ inbox: { $elemMatch: { _id: MESSAGE_ID } } } )
如果这不是您想要的,请更新您的帖子并添加您使用的语言/框架
推荐阅读
- javascript - MomentJS 返回错误的 unix 时间戳
- python - 循环遍历行并将数据打印到新的数据框
- salesforce - 在 Salesforce 中,我如何在 SOQL 中使用 Rest 调用编写 Select * 查询
- node.js - Mongoose 如何显示多个结果?
- php - 将 PHP 数组转换为 JSON 数组并使用 SLIM3 获取响应
- angular - Ionic 4 Angular - 如何自我关闭模态
- android - Android - 隐藏/显示太快时工具栏标题消失
- dynamics-crm - 我可以从 Dynamics CRM 365 on-prem 中的 POA 表中删除条目吗?
- microsoft-dynamics - Dynamics 365 中的 OneNote - 共享设置
- javascript - RXJS combineLatest 和 mergemap