У меня есть эта коллекция:Как реализовать эту операцию запроса и обновления mongodb (драйвер CSharp)?
Books
[
{
title: Book1,
References: [ObjectId(1), ObjectId(3), ObjectId(5)] <- These are object ids of another collection
Main-Reference: ObjectId(5)
},
{
title: Book2,
References: [ObjectId(2), ObjectId(5), ObjectId(7)]
Main-Reference: ObjectId(5)
}
{
title: Book3,
References: [ObjectId(5), ObjectId(7), ObjectId(9)]
Main-Reference: ObjectId(7)
},
]
У меня есть операции, где я удалить ссылки из коллекции книг Пример: Предположим, что я должен удалить Ссылка ObjectId (5) из моей коллекции Так что моя новая коллекция стала это:
Books
[
{
title: Book1,
References: [ObjectId(1), ObjectId(3)] <- ObjectId(5) is pulled
Main-Reference: ObjectId(1) <- ObjectId(1) is new value as ObjectId(5) is deleted
},
{
title: Book2,
References: [ObjectId(2), ObjectId(7)] <- ObjectId(5) is pulled
Main-Reference: ObjectId(2) <- ObjectId(2) is now main reference
}
{
title: Book3,
References: [ObjectId(7), ObjectId(9)] <- ObjectId(5) is pulled
Main-Reference: ObjectId(7) <- no changes here as ObjectId(7) still exists in References
},
]
в настоящее время это, как я делаю:
Шаг 1: Вытяните ObjectId (5) из всех книг, где литературы [] имеет ObjectId (5)
Шаг 2: Коллекция Запрос книги, где Основное ССЫЛКА = ObjectId (5) & использовать ссылки: {$ ломтик: 1} срез, чтобы получить первый элемент массива из References массива
Шаг 3: обновить все книги, найденные на шаге 2 & заменить Main-Reference на первый элемент массива, который я получаю из среза
Это кажется неуклюжим для меня и пытается увидеть, есть ли лучший способ сделать это.
FYI. Я начал вопрос о том, как запросить псевдо-основную ссылку [здесь} (http://stackoverflow.com/questions/21525882/condition-evaluate-an-array-element-to-return), которая имеет интересную деятельность. Я почти уверен, что все, что там уже применяется, является приемлемым решением для увеличения того, что я предложил. –
Спасибо за ваш ответ. Расширение массива ссылок невозможно. – kheya
Жаль. В его нынешнем виде вы не сможете достичь нужного вам обновления без повторения всех элементов, которые вы хотите изменить. Перемещение индикатора того, какой элемент является основной ссылкой внутри элемента, является единственным способом, который я вижу, чтобы избежать этого. Если схема не является вашим решением, то, вероятно, стоит попытаться убедить ответственного человека. –