MongoDB DELETE Вложенный запрос внуков в C#C#

Место общения программистов C#
Ответить
Anonymous
 MongoDB DELETE Вложенный запрос внуков в C#

Сообщение Anonymous »

уже некоторое время пытался запустить запрос удаления против коллекции MongoDB; Сильно напечатали предметы, родители, вложенные дети, каждый с вложенными внуками. Я хочу удалить конкретного внука, который находится в определенном ребенке, у конкретного родителя. Я могу добраться до MatchedCount = 1, но ModifiedCount всегда 0, а удаление не происходит. Я пробовал много вариантов запроса, как отсюда, так и с использованием двигателя ИИ на веб -сайте Mongo. ничего не работает. < /p>
Структура сущности - это то, что вы ожидаете: < /p>
public class Parent
{
public string Id {get; set;}
public Child[] Children {get; set;}
}

public class Child
{
public Guid Id {get; set;}
public Grandchild[] Grandchildren {get; set;}
}

public class Grandchild
{
public Guid Id {get; set;}
public string Name {get; set;}
}
< /code>
Вот моя последняя попытка: < /p>
var filter = Builders.Filter.Eq(x => x.Id, parentId);

var update = Builders.Update.Pull(
"Children.$[child].GrandChildren",
Builders.Filter.Eq(gc => gc.Id, Guid.Parse(grandChildId))
);

var arrayFilters = new List
{
new BsonDocumentArrayFilterDefinition(new BsonDocument("child._id", childId))
};

var updateOptions = new UpdateOptions { ArrayFilters = arrayFilters };

var result = await _parentCollection.UpdateOneAsync(filter, update, updateOptions);

return result.ModifiedCount == 1;

Обновление/удаление детей достаточно просто, но я не могу как -то добраться до внука. Есть ли кто -нибудь, что я делаю не так? Я использовал T-SQL в течение 25 лет и никогда не подозревал, что что-то такое простое может быть так сложно выяснить. Легко, когда вы знаете, как! < /p>
var filter = Builders.Filter.And(
Builders.Filter.Eq(p => p.Id, parentId),
Builders.Filter.ElemMatch(p => p.Children, c => c.Id == Guid.Parse(childId)));

var update = Builders.Update.PullFilter(
"Children.$.GrandChildren",
Builders.Filter.Eq(gc => gc.Id, Guid.Parse(grandChildId))
);

var result = await _parentCollection.UpdateOneAsync(filter, update);

return result.ModifiedCount == 1;


Подробнее здесь: https://stackoverflow.com/questions/797 ... in-c-sharp
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»