sql >> Databáze >  >> NoSQL >> MongoDB

MongoDB c# načte všechny odpovídající prvky v poli v dokumentu pomocí Definition Builder

Otázka plně nepopisuje případ použití, takže jsem pro vás přišel s několika potenciálními možnostmi, které můžete prozkoumat na základě několika předpokladů, zejména závisí na dostupnosti LINQ a na cílení na jeden dokument najednou ( a že pravděpodobně nechcete více kódu, než skutečně potřebujete):

1) Variace na to, co máte. Použijte standardní find s projekcí a výrazem LINQ.

var projection = Builders<ShapeDocument>.Projection
    .Expression(x => x.fooArray.Where(y => y.plot == "circle"));

var items1 = collection
    .Find(x => x.user == "Jone Doe")
    .Project(projection)
    .ToList();

2) Použijte agregační potrubí (můžete použít stejnou projekci jako výše)

var pipeline = collection
    .Aggregate()
    .Match(x => x.user == "Jone Doe")
    .Project(i => new
            {
                x = i.fooArray.Where(x => x.plot == "circle")
            });

var items2 = pipeline.SingleOrDefault();

3) Stáhněte dokument zpět se všemi prvky pole a poté filtrujte lokálně pomocí LINQ. Pozitivní je, že se jedná o malé množství čitelného kódu, ale vrátí celý dokument zpět před filtrováním. V závislosti na vašem přesném použití to může být přijatelné.

var items3 = collection.AsQueryable()
    .SingleOrDefault(x => x.user == "Jone Doe")
    .fooArray.Where(x => x.plot == "circle");

Pokud LINQ opravdu není možnost, pak je tu příklad zde to ukazuje, jak byste mohli převést projekci na ne my LINQ. Zcela netestováno, ale bylo by to něco ve smyslu:

var filter = new BsonDocument {
 {"input", "$items"},
 {"as", "item" },
 {"cond", new BsonDocument {
     // Fill in the condition values
     { "", new BsonArray { "", xxx } } }
   }
 };

var project = new BsonDocument {
 { "items", new BsonDocument { { "$filter", filter} } }
};

var pipeline = collection.Aggregate().Project(project);


  1. jak převést hex řetězec na ObjectId v Pythonu

  2. přidat uživatele do mongodb přes python

  3. Nasazení MongoDB ve virtuálním privátním cloudu Amazon (VPC)

  4. Připojení k Redis To Go s PHP