Предполагая, что ваши модели в C# выглядят следующим образом:
public class UnitLog
{
[BsonRepresentation(BsonType.ObjectId)]
[BsonId]
public string Id { get; set; }
public string Code { get; set; }
public List<Unit> Units { get; set; }
}
public class Unit
{
[BsonRepresentation(BsonType.ObjectId)]
[BsonId]
public string Id { get; set; }
public string Code { get; set; }
public string Label { get; set; }
}
Вы можете использовать PullFilter вытащить элемент из вложенного массива. Вот пример с драйвером MongoDb 2.0:
var mainDocumentId = "5807c22e959ca231f0c48a75";//Your containing document's Id
var arrayItemId = "5807cc08959ca331f09c530e";//Id for array item with Code=foo
var pullFilter = Builders<UnitLog>.Update.PullFilter(
x => x.Units,
x => x.Id == arrayItemId
);
//Note that you would use Collection.UpdateManyAsync()
//if you expected more than one item to be updated/pulled
var result = await Collection.UpdateOneAsync(
x => x.Id == mainDocumentId,
pullFilter
).ConfigureAwait(false);
Чтобы идентифицировать элементы в встроенном массиве вы бы использовать $ elemMatch для этого
ElemMatch MongoDb documentation
ElemMatch можно найти
Builders<UnitLog>.Filter.ElemMatch
И может использоваться в сочетании с $ set для обновления отдельных свойств встроенных документов, идентифицированных с помощью $ elemMatch.
Посмотрите на AddToSet, вы можете найти это полезным, поскольку оно добавляет элемент в массив, если элемент не существует уже
AddToSet MongoDb documentation
AddToSet можно найти
Builders<UnitLog>.Update.AddToSet
что вы сделали до сих пор? –
Если бы мой ответ помог вам, возможно, вы могли бы принять его как ответ с тиканием и повышать, если вы считаете, что это может быть полезно/полезно для других. Я только говорю это, поскольку я замечаю, что вы новичок здесь – pieperu