[英]Distinct values from various fields in MongoDB collection
我正在使用node-mongodb-native來使用節點js觸發mongodb查詢。 有一個集合名稱“位置”,其中包含以下字段:
sublocality1
, sublocality2
, sublocality3
, city
。
我想從這些字段中獲取總體不同的值。
例如:文件:
{
'sublocality1':'a',
'sublocality2':'a',
'sublocality3': 'b',
'city': 'c'
}
{
'sublocality1':'b',
'sublocality2':'a',
'sublocality3': 'b',
'city': 'a'
}
查詢應返回
['a' , 'b', 'c']
我嘗試了以下操作:
Run distinct queries for each of the fields:
collection.distinct('sublocality1',..){},
collection.distinct('sublocality2',..){},
collection.distinct('sublocality3',..){},
collection.distinct('city',..){}
將這些查詢的結果插入列表,然后在列表中搜索不同的項目。
我可以優化嗎? 是否可以運行單個查詢?
您可以將其聚集在數據庫服務器上,如下所示:
Group
單個文檔進行Group
,以獲取數組中每個預期字段的值。 Project
命名字段values
作為union
所有預期字段值,使用$ setUnion操作。 Unwind
值。 Group
所有記錄進行Group
,以獲取不同的值。 碼:
Collection.aggregate([
{$group:{"_id":"$_id",
"sublocality1":{$push:"$sublocality1"},
"sublocality2":{$push:"$sublocality2"},
"sublocality3":{$push:"$sublocality3"},
"city":{$push:"$city"}}},
{$project:{"values":{$setUnion:["$sublocality1",
"$sublocality2",
"$sublocality3",
"$city"]}}},
{$unwind:"$values"},
{$group:{"_id":null,"distinct":{$addToSet:"$values"}}},
{$project:{"distinct":1,"_id":0}}
],function(err,resp){
// handle response
})
樣本輸出/輸出:
{ "distinct" : [ "c", "a", "b" ] }
如果希望對結果進行排序,則可以在最終project
階段之前在管道中應用sort
階段。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.