2012-10-16 103 views
1

我有一個文檔集合,每個文檔都應該有另一個匹配的文檔。 (這不是通過設計,僅用於當前操作。)但是,集合中文檔數量的當前計數是奇數。有沒有一種方法可以對一個不被另一個文檔共享的鍵值進行查詢?我可以根據多個文檔進行查詢嗎?

即。如果我有這樣一個集合:

{_id:'dcab0001', foo: 1, bar: 'dfgdgd'} 
{_id:'dcab0002', foo: 2, bar: 'tjhttj'} 
{_id:'dcab0003', foo: 1, bar: 'ydgdge'} 
{_id:'dcab0004', foo: 3, bar: 'jyutkf'} 
{_id:'dcab0005', foo: 3, bar: 'pofsth'} 

我可以做foo的查詢將返回迴文件ID爲dcab0002

+1

你可以做到這一點與的Map/Reduce –

+0

你基本上是在尋找所有不同的()文件? – Sammaye

+0

據我所知,他只想要foo = 2的文件,因爲它沒有配對。他不想獲得有一對的文件。 –

回答

3

您可以使用MapReduce或使用Aggregation Framework在MongoDB 2.2+中執行此操作。

下面是一個使用聚合框架的例子:

db.pairs.aggregate(

    // Group by values of 'foo' and count duplicates 
    { $group: { 
     _id: '$foo', 
     key: { $push: '$_id' }, 
     dupes: { $sum: 1 } 
    }}, 

    // Find the 'foo' values that are unpaired (odd number of dupes) 
    { $match: { 
     dupes: { $mod: [ 2, 1 ] } 
    }} 

    // Optionally, could add a $project to tidy up the output 
) 

輸出示例:

{ 
    "result" : [ 
     { 
      "_id" : 2, 
      "key" : [ 
       "dcab0002" 
      ], 
      "dupes" : 1 
     } 
    ], 
    "ok" : 1 
} 
相關問題