mongodb c #: обновление нескольких документов с фиксированным размером

1

Допустим, у нас есть коллекция под названием "вещи", где "вещь" - это такой документ:

thing : {
    field1 : value1,
    field2 : value2,
    ...
    fieldn : valuen,
    someDate : dateValue
}

Используя С# (официальный драйвер), мы можем обновить несколько документов в коллекции "вещи", выполнив следующие действия:

things.Update(query, update, UpdateFlags.Multi);

Вопрос: есть ли способ упорядочить "вещи" в поле "someDate", а затем взять фиксированное количество документов для обновления?

что-то вроде:

things.Update(query, update, UpdateFlags.Multi).orderby('somedate').take(1000)

Спасибо.

Теги:

1 ответ

1
Лучший ответ

Вам нужно будет найти критерий, который соответствует всем документам, которые вы хотите обновить. Например, если ваши документы имеют ObjectId как _id поле, вы можете сделать это:

var highId = things.Find(query).SetSkip(1000).First().Id;

а затем выполните обновление следующим образом:

things.Update(Query.And(Query.<Thing>.LTE(p => p.Id, highId), otherCriteria),
              update, UpdateFlags.Multi)

Это, однако, также обновит все документы, которые были вставлены совсем недавно, то есть между запросом и оператором обновления. Вы также можете запросить первый и последний _id и использовать пару GT/LTE.

Естественно, для этого требуется некоторый монотонный ключ (например, ObjectId или временная метка).

Также имейте в виду, что метки времени создаются клиентами, поэтому ожидайте некоторого перекоса часов.

  • 0
    Это интересный «взлом», может быть решением моей проблемы. однако предполагается, что поле _id увеличивается для каждого вставленного документа. но мы могли бы также иметь некоторые исключения.
  • 1
    Я боюсь, что ваше решение - лучший способ сделать это. подожду немного, прежде чем пометить его как ответ. благодарю вас.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню