2016-04-11 24 views
0

Merhaba LINQ kullanarak belgelerimi bir dizide saymaya çalışıyorum.Yerleşik belgeleri sayma mongodb C# LINQ

Yapım basittir. İşte basitleştirilmiş bir Bson örneği.

{ 
"_id" : ObjectId("56fa945dbf0c37096048109f"), 
"Commands" : [ 
    { 

     "CommandId" : ObjectId("56fbdc24bf0c372078f10227"), 
    }, 
    { 
     "CommandId" : ObjectId("56fbdc28bf0c372078f1022b"),  
    }, 
    { 
     "CommandId" : ObjectId("570b6863bf0c370838473321"), 
    } 
] 

}

Bu defa ile geldi budur ama sadece ben 1 komutu var diyor.

var result = 
        (from e in collection.AsQueryable<Sequence>() 
        where e._id == seqid 
        select e.Commands).Count();    
       Console.WriteLine("There where " + result + " Commands"); 

Herhangi bir fikir?

+0

Bir wh oldu ile MongoDB kullandım, ama bu durumda gerçekten sadece 1 öğe olan Komut nesnelerinin sayısını sayıyor gibi görünüyor. Komutlar nesnesinin içeriğini numaralandırmanız gerekir. – Alex

cevap

1

Bunun için toplama çerçevesini ve $ boyutunu kullanmanızı öneririz. Bu, dizinin kendisini istemciye aktarmasını engeller.

var result = collection.Aggregate().Match(x => x.Id == seqid) 
    .Project(new BsonDocument("count", new BsonDocument("$size", "$Commands"))) 
    .FirstOrDefault() 
    .GetValue("count").ToInt32(); 

Console.WriteLine("There were " + result + " Commands"); 

Burada $ boyutu hakkında daha fazla bilgi edinebilirsiniz: Örneğin:

https://docs.mongodb.org/manual/reference/operator/aggregation/size/

+0

Bunu bilmiyordum. İyi görünüyor ve sana teşekkür ederim Kevin! – Jacob

0

En iyisi olmasa da bir çözüm bulmayı başardım ama işe yarıyor.

  var result = (from p in collection.AsQueryable().Where(p => p._id == seqid) 
       from cmds in p.Commands 
       select cmds).Count(); 
      Console.WriteLine("There where " + result + " Commands"); 
0

LINQ sorguları hep toplama çerçeve boru hatları

> var pipeline = [ 
... { "$group" : { "_id" : 1, "__result" : { "$sum" : 1 } } } 
... ] 
> db.test.aggregate(pipeline) 

kullanın basit Sayım yöntemi ile çevrilir süzme