I have a UserInfo
collection and in that there is a field called UserThemes
. I want to get the users if there are themes with values greater than 100.
This is the UserInfo collection:
public record UserInfo:BaseDocument
{
public string UserName { get; set; }
public BsonDocument UserThemes { get; init; } = new BsonDocument();
}
This is a sample of stored data:
{
"_id" : ObjectId("62f8fe33127584b3e027060e"),
"UserId" : "7BCBCC2DA9624BCB8191AC2DBDC5CA71",
"UserName" : "kaveh",
"UserThemes" : {
"football" : 10,
"basketball" : 110,
"volleyball" : 90,
"tennis" : 50,
"golf" : 25
}
}
So far I have tried this but it didn't work (I'm using MongoDB C#/.NET Driver):
var docs = await _context.UserInfos.Aggregate()
.Match(
new BsonDocument() {
{ "$expr", new BsonDocument() {
{ "$and", new BsonArray() {
new BsonDocument(){{ "$gt", new BsonArray() { "$UserThemes.value", BsonValue.Create(100) } } },
}
}
}
}
})
.As<UserInfo>()
.ToListAsync();
$match
1.1.
$gt
- Filter the document with array (from the result 1.1.1) size ($size
) is greater than 0.1.1.1.
$filter
- Filter the document from the input (converting theUserThemes
field from key-value pair to the document array via$objectToArray
) withv
is greater than 100.Demo @ MongoPlayground