我有一个采用当前架构的Mongo集合:(简体)
{
"_id" : ObjectId("55a94615a243a426db43d81e"),
"property_name" : "My Main Property",
"domain_list" : [
"mynumber1url.com",
"mynumber2url.com",
"mynumber3url.com"
]
}
我想查询此集合,并返回domain_list的所有元素以及与其关联的property_name,例如:
mynumber1url.com My Main Property
mynumber2url.com My Main Property
mynumber3url.com My Main Property
mynumber4url.com My Other Property
...
可以接受汇总查询,但我宁愿只用一个查询/投影就能做到
答案 0 :(得分:1)
一个$unwind
阶段就足够了:
db.collection.aggregate([
{$unwind: '$domain_list'}
])
它将导致:
[{
"_id": ObjectId("55a94615a243a426db43d81e"),
"property_name" : "My Main Property",
"domain_list" : "mynumber1url.com"
}, {
"_id": ObjectId("55a94615a243a426db43d81e"),
"property_name" : "My Main Property",
"domain_list" : "mynumber2url.com"
}, {
"_id": ObjectId("55a94615a243a426db43d81e"),
"property_name" : "My Main Property",
"domain_list" : "mynumber3url.com"
}]
或者如果您想将其放在单个字符串中(我不确定格式):
db.getCollection('x').aggregate([
{$unwind: '$domain_list'},
{$project: {_id: {$concat: ['$property_name', ' ', '$domain_list']}}}
])
这将导致:
[
{"_id": "My Main Property mynumber1url.com"},
{"_id": "My Main Property mynumber2url.com"},
{"_id": "My Main Property mynumber3url.com"}
]
答案 1 :(得分:1)
您可以在3.4.4及更高版本中使用以下聚合。
db.colname.aggregate([
{"$replaceRoot":{"newRoot":
{"$arrayToObject":{
"$map":{
"input":"$domain_list",
"as":"dl",
"in":{
"k":"$$dl",
"v":"$property_name"
}
}
}}
}}
])
输出:
{
"mynumber1url.com" : "My Main Property",
"mynumber2url.com" : "My Main Property",
"mynumber3url.com" : "My Main Property"
}