折腾:
【未解决】小程序端如何显示换行符使得文字分段显示
期间,想要去更新MongoDB中某个值,是带换行的文字:

之前通过Mongo Compass去更新的,发现坑爹的是:表面上更新了,实际上把换行变成空格了。。
所以此处换用mongo shell试试。
换用mongo的命令行去试试能否保存换行的字符
What does the word
先用Mongo Compass中去查找出来:
{"stem_text": {"$regex": "What does the word*"}}
然后再去命令行中试试
➜ ~ mongo --host ip --port port -u user -p pwd --authenticationDatabase authDb
MongoDB shell version v3.6.3
connecting to:
mongodb://ip:port/
MongoDB server version: 3.2.19
WARNING: shell and server versions do not match
Server has startup warnings:
2018-12-21T17:06:59.067+0800 I CONTROL [initandlisten]
2018-12-21T17:06:59.067+0800 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.
2018-12-21T17:06:59.067+0800 I CONTROL [initandlisten] ** We suggest setting it to 'never'
2018-12-21T17:06:59.067+0800 I CONTROL [initandlisten]
2018-12-21T17:06:59.067+0800 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.
2018-12-21T17:06:59.067+0800 I CONTROL [initandlisten] ** We suggest setting it to 'never'
2018-12-21T17:06:59.067+0800 I CONTROL [initandlisten]
2018-12-21T17:06:59.068+0800 I CONTROL [initandlisten] ** WARNING: soft rlimits too low. rlimits set to 4096 processes, 65535 files. Number of processes should be at least 32767.5 : 0.5 times number of files.
2018-12-21T17:06:59.068+0800 I CONTROL [initandlisten]
> show dbs
admin 0.000GB
dialog 0.272GB
evaluation 0.318GB
exam 0.000GB
gridfs 13.869GB
local 0.000GB
log 0.001GB
storybook 0.173GB
> use evaluation
switched to db evaluation
> show collections
audio.chunks
audio.files
evaluation
image.chunks
image.files
question
> db.question.findOne
db.question.findOne( db.question.findOneAndDelete( db.question.findOneAndReplace( db.question.findOneAndUpdate(
> db.question.findOne({"_id": ObjectId("5c1777e1cc6df4563adf4bf6")})
{
"_id" : ObjectId("5c1777e1cc6df4563adf4bf6"),
"checkpoint" : [
54,
69,
"句子理解"
],
"stem_type" : "text",
"difficulty" : 3.2,
"stem_image" : "",
"ave_answer_time" : 25,
"audio_text" : "",
"audio" : "",
"question_number" : 424,
"major_type" : "单选",
"audio_length" : 0,
"max_answer_time" : 50,
"stem_text" : "What does the word \"visit\" mean in the sentence below? At Thanksgiving, Tasha will visit her grandparents.",
"sub_questions" : [
{
"correct_option" : [
3
],
"options" : [
{
"option_index" : 1,
"option_text" : "Write a letter to",
"option_image" : ""
},
{
"option_index" : 2,
"option_text" : "Say thank you to",
"option_image" : ""
},
{
"option_index" : 3,
"option_text" : "Go and spend time with",
"option_image" : ""
}
],
"option_type" : "text",
"question_texts" : [
""
]
}
]
}
>然后去试试:
db.evaluation.update({"_id": ObjectId("5c1777e1cc6df4563adf4bf6")}, {$set: {"stem_text": "What does the word \"visit\" mean in the sentence below?
At Thanksgiving, Tasha will visit her grandparents."}})其中below?后面,At Thanksgiving前面,是换行符
结果语法错误:
> db.evaluation.update({"_id": ObjectId("5c1777e1cc6df4563adf4bf6")}, {$set: {"stem_text": "What does the word \"visit\" mean in the sentence below?
2018-12-26T10:19:27.781+0800 E QUERY [thread1] SyntaxError: unterminated string literal @(shell):1:89
> At Thanksgiving, Tasha will visit her grandparents."}})mongodb update text contain new line
mongodb update text contain \n
mongodb text include new line
感觉只有写代码去更新才可以?
意思是:JSON本身就不支持保存值的text的string是多行的string?
mongo json store multiple line
JSON
db.tests.insert( {
name: 'test1',
text: 'this is ' +
'my superawesome ' +
'multiline content'
} )-》
db.tests.insert( {
name: 'test2',
text: "this is \nmy superawesome \nmultiline content"
} )【总结】
所以目前的结论是:
JSON语法规范本身

就说了:
- 不能包含换行符
- 换行符属于:控制字符control character
- JSON规范就不支持control character
- JSON规范支持 \n(这是两个字符)
而MongoDB是基于JSON的,所以MongoDB本身不方便保存多行字符串,不是MongoDB的错,而是JSON的规范不支持(的不方便之处)。
想要MongoDB支持多行字符串,可以:
- 方案1:把 单个的表示换行的控制字符 \n ,保存为 “\n”(2个字符,一个是反斜杠,一个是n)
- 这样前端,比如web端,小程序段,移动端等,自己再去替换”\n”为\n
- 方案2:把包含换行的字符串,保存为字符串列表,每个字符串是换行后的某一行
- 比如:
"this is first line and second line"
保存为:
[ "this is first line" "and second line" ]
即可。
转载请注明:在路上 » 【规避解决】MongoDB中如何更新某字段的值为带换行的文字