以下是我的MongoDb结构示例:
{
"id" : 1,
"children" : [
{
"id" : 2,
"status" : " fsdfsdf "
},
{
"id" : 3,
"status" : " ffdfg "
},
{
"id" : 4,
"status" : " fsdfsdfsdfdsf "
}
]
}
我想修剪mongodb中的记录,所以我做了:
db.getCollection('myCollectionName').find().forEach(function (doc){
for (subDoc of doc.children) {
if(typeof subDoc.status === 'string') {
subDoc.theText = subDoc.theText.trim();
}
}
db.getCollection('myCollectionName').save(doc);
})
但我收到了这个错误:
E QUERY SyntaxError:意外的标识符
答案 0 :(得分:2)
您使用了错误的标识符 - 数组项没有theText
标识符。
var docs = db.getCollection('myCollectionName').find()
docs.forEach(function (doc) {
for (subDoc of doc.children) {
if(typeof subDoc.status === 'string') {
subDoc.status = subDoc.status.trim();
}
}
db.getCollection('myCollectionName').save(doc);
})
使用db stackoverflow打开本地mongo shell
⋊> ~ mongo stackoverflow
MongoDB shell version v3.4.1
connecting to: mongodb://127.0.0.1:27017/stackoverflow
MongoDB server version: 3.4.0
插入一个(您的)文件
> db.getCollection('myCollectionName').insertOne({
... "id" : 1,
... "children" : [
... {
... "id" : 2,
... "status" : " fsdfsdf "
... },
... {
... "id" : 3,
... "status" : " ffdfg "
... },
... {
... "id" : 4,
... "status" : " fsdfsdfsdfdsf "
... }
... ]
... })
{
"acknowledged" : true,
"insertedId" : ObjectId("588b4984522a4f31ff6bc738")
}
查找插入的文档
> db.getCollection('myCollectionName').findOne()
{
"_id" : ObjectId("588b4984522a4f31ff6bc738"),
"id" : 1,
"children" : [
{
"id" : 2,
"status" : " fsdfsdf "
},
{
"id" : 3,
"status" : " ffdfg "
},
{
"id" : 4,
"status" : " fsdfsdfsdfdsf "
}
]
}
我使用findOne
,因为我在db中只知道一个文档。在正常情况下,您需要使用find
和pretty
来查找集合中的所有文档
> db.getCollection('myCollectionName').find().pretty()
在集合中查找文档并将光标保存在变量
中> var docs = db.getCollection('myCollectionName').find()
在文档中的数组status
中运行修剪仅字段children
的函数
> docs.forEach(function (doc) {
... for (subDoc of doc.children) {
... if(typeof subDoc.status === 'string') {
... subDoc.status = subDoc.status.trim();
... }
... }
...
... db.getCollection('myCollectionName').save(doc);
... })
生产的改进:仅查找包含字段子项的文档并将字段检入文档。
检查结果(找到文件)
> db.getCollection('myCollectionName').findOne()
{
"_id" : ObjectId("588b4984522a4f31ff6bc738"),
"id" : 1,
"children" : [
{
"id" : 2,
"status" : "fsdfsdf"
},
{
"id" : 3,
"status" : "ffdfg"
},
{
"id" : 4,
"status" : "fsdfsdfsdfdsf"
}
]
}