Reputation: 1053
I have this method to push new data into NozzleStateList:
public async Task AddNozzleState(NozzleState nozzleState, Guid tankId, Guid gasStationId)
{
UpdateDefinition<GasStation> update = Builders<GasStation>.Update.Push("TankList.$[t].NozzleList.$[n].NozzleStateList", nozzleState);
await _context.GetCollection<GasStation>().UpdateOneAsync(x => x.Id == gasStationId, update, new UpdateOptions
{
ArrayFilters = new List<ArrayFilterDefinition>{
new BsonDocumentArrayFilterDefinition<BsonDocument>(new BsonDocument("t._id", tankId)),
new BsonDocumentArrayFilterDefinition<BsonDocument>(new BsonDocument("n._id", nozzleState.NozzleId))
}
});
}
and the collection it is supposed to be pushed to is this:
the AddNozzleState method runs without error but does not save anything.
What is the problem?
Upvotes: 1
Views: 336
Reputation: 1053
Finally I changed my approach and used JsonArrayFilterDefinition and this code works:
public async Task AddNozzleState(NozzleState nozzleState, Guid tankId, Guid gasStationId)
{
UpdateDefinition<GasStation> update = Builders<GasStation>.Update.Push("TankList.$[t].NozzleList.$[n].NozzleStateList", nozzleState);
await _context.GetCollection<GasStation>().UpdateOneAsync(x => x.Id == gasStationId, update, new UpdateOptions
{
ArrayFilters = new List<ArrayFilterDefinition>{
new JsonArrayFilterDefinition<Tank>("{'t._id': { $eq : UUID(\""+ tankId +"\")} }"),
new JsonArrayFilterDefinition<Nozzle>("{'n._id': { $eq : UUID(\""+ nozzleState.NozzleId+"\")}}")
}
});
}
Upvotes: 3