MongoDB сохраняет новые строки внутри объектов

#mongodb #mongo-shell

Вопрос:

Я новичок в MongoDB и следую учебнику, чтобы привыкнуть к оболочке и основным командам MongoDB. В учебнике инструктор набрал команду insertOne внутри IDE, а затем вставил ее в оболочку Mongo. Когда они это сделали, объект, казалось, сам собой разрушился, избавляясь от новых линий. Когда я это сделал, он, похоже, сохранил структуру, которая была у него, когда я печатал его в своей среде разработки.

Вот как я набрал команду insertOne, которую затем вставил в оболочку:

 db.products.insertOne({
  _id: 2,
  name: 'Pencil',
  price: 0.80,
  stock: 12,
  reviews: [
    {
      authorName: 'Harry',
      rating: 5,
      review: 'Really made me write!'
    }
  ]
})
 

И вот что выяснилось, когда я запросил все предметы в коллекции. В «Ручке» я только что ввел все в одну строку, потому что она была короткой. одна однострочная, одна многострочная

  1. Какой способ хранения документа был бы более нормальным? Конечно, более читабельно, чтобы каждая пара ключ-значение находилась в одной строке, но я предполагаю, что она занимает больше места или что-то в этом роде для хранения
  2. Я что-то здесь делаю не так?

Ответ №1:

Я думаю, что вы объединяете то, как документ хранится в базе данных, и то, как он представлен на вашем экране приложением/драйвером/оболочкой/IDE.

MongoDB хранит документы с использованием BSON. Показанный документ будет сохранен в виде (шестнадцатеричной записи):

 00000000: 9f00 0000 015f 6964 0000 0000 0000 0000  ....._id........
00000010: 4002 6e61 6d65 0007 0000 0050 656e 6369  @.name.....Penci
00000020: 6c00 0170 7269 6365 009a 9999 9999 99e9  l..price........
00000030: 3f01 7374 6f63 6b00 0000 0000 0000 2840  ?.stock.......(@
00000040: 0472 6576 6965 7773 0055 0000 0003 3000  .reviews.U....0.
00000050: 4d00 0000 0261 7574 686f 724e 616d 6500  M....authorName.
00000060: 0600 0000 4861 7272 7900 0172 6174 696e  ....Harry..ratin
00000070: 6700 0000 0000 0000 1440 0272 6576 6965  g........@.revie
00000080: 7700 1600 0000 5265 616c 6c79 206d 6164  w.....Really mad
00000090: 6520 6d65 2077 7269 7465 2100 0000 00    e me write!....
 

Там вообще не хранятся новые строки.

Когда запросы, эти байты-это то, что будет отправлено по проводу, все, что на самом деле отображается вам, — это интерпретация этих байтов приложением на стороне клиента.