MongoDB 在对象中保留换行符

MongoDB preserving newlines inside objects

我是 MongoDB 的新手,正在按照教程习惯 shell 和基本的 MongoDB 命令。在教程中,讲师在 IDE 中键入了一个 insertOne 命令,然后将其粘贴到 Mongo shell 中。当他们这么做的时候,这个物体似乎自己坍塌了,摆脱了新的线条。当我这样做时,它似乎保留了我在 IDE.

中输入时的结构

这是我输入 insertOne 命令的方式,然后将其粘贴到 shell:

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

这是我查询集合中的所有项目时得出的结果。 'Pen' 一个,我只是在一行中输入所有内容,因为它很短。

  1. 文档的存储方式哪种更正常?当然,每个键值对都在一行上更具可读性,但我认为它占用更多 space 或以这种方式存储的东西

  2. 我是不是做错了什么?

我认为您混淆了文档在数据库中的存储方式以及 application/driver/shell/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!....

那里根本没有存储换行符。

查询时,这些字节是通过线路发送的内容,实际显示给您的是客户端应用程序对这些字节的解释。