Studio 3T选择数组列中的所有数组值

时间:2018-07-16 20:46:51

标签: mongodb studio3t

我有一个采用当前架构的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
...

可以接受汇总查询,但我宁愿只用一个查询/投影就能做到

2 个答案:

答案 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" 
}