2017-07-09 13 views
0

文書属性値に基づいて重複文書を削除するにはどうすればよいですか?たとえば、コレクション内の文書はDocumentDBから重複する文書を削除する

[ { 
    "ProductIdentifier": "A100", 
    "ProductTitle": "Product A", 
    "_ts": 1491664477 
    }, 
    { 
    "ProductIdentifier": "A100", 
    "ProductTitle": "Product A" 
    "_ts": 1491664466 
    } 
    { 
    "ProductIdentifier": "B100", 
    "ProductTitle": "Product B" 
    "_ts": 1491664477 
    } 
] 

の下に与えられているように私はそれが(ProductIdentifierに基づいて)最初の文書と同じであると(_tsに基づいて)下のタイムスタンプを持っているように、第2の文書を削除したい

コレクションに重複した文書がかなりたくさんあります。バルクで効率的な方法は何ですか?

答えて

0

各グループからデータをグループ化し、同じProductIdentifier値と低いタイムスタンプを持つ重複を削除すると思われます。私の知る限りでは、現在GroupBy does not be supported in DocumentDBです。ただし、データをグループ化して、LINQを介して各グループからProductIdentifierを取得し、同じProductIdentifierを持つドキュメントにクエリを実行し、重複を削除することができます。

var query = client.CreateDocumentQuery<MyDoc>(UriFactory.CreateDocumentCollectionUri("testdb", "testcoll")).Where(d => d.ProductIdentifier != ""); 

List<MyDoc> list1 = query.ToList(); 

var result = list1.GroupBy(item => new 
{ 
    ProductIdentifier = item.ProductIdentifier, 
    ProductTitle = item.ProductTitle 
}) 
.Select(group => new 
{ 
    ProductIdentifier = group.Key.ProductIdentifier, 
    ProductTitle = group.Key.ProductTitle 
}); 

foreach (var item in result) 
{ 
    var query1 = client.CreateDocumentQuery<MyDoc>(UriFactory.CreateDocumentCollectionUri("testdb", "testcoll")).Where(d => d.ProductIdentifier == item.ProductIdentifier && d.ProductTitle == item.ProductTitle); 

    if (query1.Count() > 1) 
    { 
     //delete duplicates from a group 
    } 

} 

ラリーMaccheroneがdocumentdb-lumenizeは私たちがGROUPBYを行うことができますストアドプロシージャ、として書かれDocumentDBの集計ライブラリで、this threadに言ったように、他に。

string configString = @"{ 
    cubeConfig: { 
     groupBy: 'ProductIdentifier', 
     field: '_ts', 
     f: 'max' 
    }, 
    filterQuery: 'SELECT * FROM c' 
}"; 
Object config = JsonConvert.DeserializeObject<Object>(configString); 
dynamic result = await client.ExecuteStoredProcedureAsync<dynamic>(UriFactory.CreateStoredProcedureUri("testdb", "testcoll", "cube"), config); 
//get group info form result.Response 
+0

@Alvin PL any updates?あなたは今重複を削除できますか? –

関連する問題