如何在Mongo查询中获取嵌套的3标签数组对象?



基本上结构是:

{
"_id" : ObjectId("123123"),
"stores" : [
{
"messages" : [
{
"updated_time" : "2018-05-15T05:12:25+0000",
"message_count" : 4,
"thread_id" : "123",
"messages" : [
{
"message" : "Hi User ",
"created_time" : "2018-05-15T05:12:25+0000",       
"message_id" : "111",
},
{
"message" : "This is tes",
"created_time" : "2018-05-15T05:12:21+0000",
"message_id" : "222",
}
]
},
],
"store_id" : "123"
}
]
}

我有这些值来获取对象message_id:111。所以如何得到这个对象,任何想法或帮助将不胜感激。谢谢

store_id: 123,
thread_id:123,
message_id:111

最简单的方法是$unwind所有嵌套数组,然后使用$match获取单个文档。您还可以添加$replaceRoot以仅获取嵌套文档。尝试:

db.collection.aggregate([
{  $unwind: "$stores" },
{  $unwind: "$stores.messages" },
{  $unwind: "$stores.messages.messages" },
{  $match: { "stores.store_id": "123", "stores.messages.thread_id": "123", "stores.messages.messages.message_id": "111" } },
{  $replaceRoot: { newRoot: "$stores.messages.messages" } }
])

指纹:

{
"created_time": "2018-05-15T05:12:25+0000",
"message": "Hi User ",
"message_id": "111"
}

若要提高性能,可以在每次$unwind后使用$match尽快筛选出不必要的数据,请尝试:

db.collection.aggregate([
{  $unwind: "$stores" },
{  $match:  { "stores.store_id": "123" } },
{  $unwind: "$stores.messages" },
{  $match:  { "stores.messages.thread_id": "123" } },
{  $unwind: "$stores.messages.messages" },
{  $match: { "stores.messages.messages.message_id": "111" } },
{  $replaceRoot: { newRoot: "$stores.messages.messages" } }
])

最新更新