Как добавить два новых поля в существующий документ коллекции MongoDB непосредственно перед определенным полем? [Дубликат]

Самый простой способ упорядочить список - использовать OrderBy

 List<Order> objListOrder = 
    source.OrderBy(order => order.OrderDate).ToList();

Если вы хотите заказать несколько столбцов, например, следующий SQL Query.

ORDER BY OrderDate, OrderId

Чтобы достичь это вы можете использовать ThenBy, как показано ниже.

  List<Order> objListOrder = 
    source.OrderBy(order => order.OrderDate).ThenBy(order => order.OrderId).ToList();
16
задан techexpert 18 February 2011 в 22:35
поделиться

6 ответов

MongoDB выделяет пространство для нового документа на основе определенного коэффициента заполнения. Если ваше обновление увеличивает размер документа за пределами первоначально выделенного размера, документ будет перемещен в конец коллекции. Эта же концепция применяется к полям в документе.

20
ответ дан Bernie Hackett 18 August 2018 в 22:49
поделиться
  • 1
    Берни, спасибо! Я понимаю причину, но не решение. Если они, MongoDB, должны переписать весь документ для удовлетворения новых требований к пространству, почему они не могут сохранить порядок полей / документов в этом процессе? Есть ли штраф за исполнение или это то, что у них просто не было времени для реализации? - просто любопытно. – techexpert 19 February 2011 в 02:05

FYI, в обновления MongoDB 2.6 сохранят порядок полей со следующими исключениями:

  1. Поле _id всегда является первым полем в документе.
  2. Обновления, которые включают переименование имен полей, могут привести к переупорядочению полей в документе.
10
ответ дан helmy 18 August 2018 в 22:49
поделиться

Структура и структура документов в MongoDB на основе принципов JSON. JSON представляет собой набор пар ключ / значение (в частности fieldName / fieldValue для документа и индекса / документа для сбора). С этой точки зрения, похоже, вы не можете вообще опираться на порядок.

6
ответ дан Michael Mior 18 August 2018 в 22:49
поделиться
  • 1
    MongoDB полагается на bson, а не элементы json и bson упорядочены: ru.wikipedia.org/wiki/BSON – alobodzk 28 September 2015 в 12:43
  • 2
    Порядок ключей может иметь значение в монго, некоторые поисковые запросы возвращают некоторые результаты или не могут быть получены в зависимости от порядка ключей для вложенных документов. Например, см. Devblog.me/wtf-mongo, и если связь когда-либо умирает, найдите ее на машине с обратным доступом. – Kevin Wheeler 3 September 2016 в 06:01

Раман, правильно, мы не можем сортировать dictionay, но мы можем сортировать визуализацию диктатора, поэтому мы не можем сортировать поданный заказ документации, но я вижу, что он упорядочен.

Например, в perl to_json есть опция canonical

print to_json( $data, { utf8 => 1, pretty => 1, convert_blessed => 1, canonical => 1 } );

(каноническая опция) выведет объекты JSON, отсортировав их ключи. Это добавляет сравнительно высокие накладные расходы. (конечно, мы делаем больше операций сортировки ...)

0
ответ дан Sérgio 18 August 2018 в 22:49
поделиться

Я создал проект, который создает пользовательский mongorc.js, который по умолчанию сортирует ключи документов. Он называется Mongo Hacker

2
ответ дан Tyler Brock 18 August 2018 в 22:49
поделиться
  • 1
    не знал о Mongo Hacker .. удивительные улучшения Тайлер – Francisco Tomé Costa 25 March 2015 в 13:50

В случае документов, если размер поля изменяется, он выписывает новый документ с полями, отсортированными по имени поля. Это поведение можно увидеть со следующими утверждениями

Случай 1: Изменение размера поля не изменяется, поэтому изменение порядка поля

> db.testcol.find()
> db.testcol.save({a:1,c:3,b:2})
> db.testcol.find()
{ "_id" : ObjectId("4d5efc3bec5855af36834f5a"), "a" : 1, "c" : 3, "b" : 2 }
> db.testcol.update({a:1},{$set:{c:22}})
> db.testcol.find()
{ "_id" : ObjectId("4d5efc3bec5855af36834f5a"), "a" : 1, "c" : 22, "b" : 2 }

Случай 2: изменения размера поля и поля перерисовываются

> db.testcol.find()
> db.testcol.save({a:1,c:"foo",b:2,d:4})
> db.testcol.find()
{ "_id" : ObjectId("4d5efdceec5855af36834f5e"), "a" : 1, "c" : "foo", "b" : 2, "d" : 4 }
> db.testcol.update({a:1},{$set:{c:"foobar"}})
> db.testcol.find()
{ "_id" : ObjectId("4d5efdceec5855af36834f5e"), "a" : 1, "b" : 2, "c" : "foobar", "d" : 4 }

Есть ли конкретная причина, по которой вы не хотите, чтобы поля были переупорядочены? Выше было использование 1.8.0_rc0 на OS X

4
ответ дан zangw 18 August 2018 в 22:49
поделиться
  • 1
    Никакой конкретной причины, по крайней мере, пока нет, но я думал, что, если я забуду добавить «сортировку», вариант моего запроса, это может повлиять на то, как код отображает данные. Или, если код будет использовать числовые массивы (даже если это не так), например var [0], var [1], var [2] и т. Д., И порядок полей изменяется, тогда это также может представлять проблему. Я просто вхожу в эту NoSQL «databasing», поэтому у меня возникают такие вопросы, как эта всплывающая подсказка повсюду в моей голове :) – techexpert 19 February 2011 в 01:57
Другие вопросы по тегам:

Похожие вопросы: