2017-07-30 51 views
0

mongo用戶的一個小謎。MongoDB:我如何檢查所有數組條目在整個集合中是唯一的?

我的文檔集合像

{ 
    "_id" : ObjectId("19628f4f0545a733185b672f"), 
    "name" : "hello", 
    "items" : [ 
     { 
      "itemNumber" : 12512, 
      "value" : "let" 
     }, 
     { 
      "itemNumber" : 2546, 
      "value" : "put" 
     } 
    ] 
} 

我需要確保每一個項目的itemNumber是全局唯一的收藏。

在SQL數據庫中,我會對項目一個單獨的表和檢查查詢,如果號碼是唯一會像

select count(1) 
from (
    select itemNumber, count(itemNumber) as cnt 
    from items 
    group by itemNumber) sel 
where cnt>1; 

所得0將意味着所有itemNumber s爲唯一的。 (也許有更好的辦法,使在SQL中檢查)

隨着MongoDB的唯一的解決辦法,我能來是

一)使用forEach提取的所有項目,需要單獨收集

b)作出一個簡單的聚集

db.items.aggregate(
    { $group : { _id : '$itemNumber', count : {$sum : 1} } }, 
    { $out : "cnt" } 
) 

C)db.cnt.find({count: {$gt: 1}}).count()

是否有任何一個查詢的方式來做到這一點?

性能通知:收集約3M文件,每個2,2KB。我注意到包含$group的聚合在這個集合上永遠運行。

+0

這裏描述的可能的解決方案:https://stackoverflow.com/questions/7102918/in-mongodb-how-do-i-check-if-all-the -documents-are-unique-for-a-value – mgyongyosi

回答

1

如何類似的東西:

db.items.aggregate(
    { $unwind: "$items" } , 
    { $group : { _id : '$items.itemNumber', count : { $sum : 1 } } }, 
    { $match: { "count": { $gt: 1 } } } 
) 
+0

謝謝你,它完美的作品。 –

相關問題