簡體   English   中英

MongoDB集合中各個字段的不同值

[英]Distinct values from various fields in MongoDB collection

我正在使用node-mongodb-native來使用節點js觸發mongodb查詢。 有一個集合名稱“位置”,其中包含以下字段:

sublocality1sublocality2sublocality3city

我想從這些字段中獲取總體不同的值。

例如:文件:

{
  '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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM