sql >> Database teknologi >  >> NoSQL >> MongoDB

MongoDB c# henter alle matchende elementer i et array i et dokument ved hjælp af Definition Builder

Spørgsmålet beskriver ikke helt brugssagen, så jeg har fundet et par potentielle muligheder for dig at udforske baseret på nogle få antagelser, især afhænger de af, at LINQ er tilgængelig og målretter mod et enkelt dokument ad gangen ( og at du sandsynligvis ikke vil have mere kode, end du virkelig har brug for):

1) En variation af hvad du har. Brug en standard find med en projektion og LINQ udtryk.

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) Brug aggregeringspipelinen (du kan bruge den samme projektion som ovenfor)

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) Træk dokumentet tilbage med alle array-elementer og filtrer derefter lokalt ved hjælp af LINQ. På plussiden er dette en lille mængde læsbar kode, men det bringer hele dokumentet tilbage før filtrering. Afhængigt af din præcise brug kan dette godt være acceptabelt.

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

Hvis LINQ virkelig er ikke en mulighed, så er der et eksempel her der viser, hvordan du kan konvertere projektionen til ikke os LINQ. Fuldstændig utestet, men ville være noget i retning af:

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. Sådan opretter du et Mongoose-skema fra JSON

  2. Sådan skifter du et element i array i mongoDB

  3. MongoDB $indexOfCP

  4. Skub element i en hvilken som helst position af array i underdokumentet