美文网首页
MongoDB 文档

MongoDB 文档

作者: 薥劃 | 来源:发表于2020-07-23 10:56 被阅读0次

插入文档

语法格式

db.COLLECTION_NAME.insert(document)

db.COLLECTION_NAME.save(document)

  • save():如果 _id 主键存在则更新数据,如果不存在就插入数据。该方法新版本中已废弃,可以使用 db.collection.insertOne() 或 db.collection.replaceOne() 来代替。
  • insert(): 若插入的数据主键已经存在,则会抛 org.springframework.dao.DuplicateKeyException 异常,提示主键重复,不保存当前数据。

db.collection.insertOne() 用于向集合插入一个新文档,语法格式如下

db.collection.insertOne(
<document>,
{
writeConcern: <document>
}
)

db.collection.insertMany() 用于向集合插入一个多个文档,语法格式如下:

db.collection.insertMany(
[ <document 1> , <document 2>, ... ],
{
writeConcern: <document>,
ordered: <boolean>
}
)

参数说明:
  • document:要写入的文档。
  • writeConcern:写入策略,默认为 1,即要求确认写操作,0 是不要求。
  • ordered:指定是否按顺序写入,默认 true,按顺序写入。
实例

>db.col.insert({title: '我是一個标题',
description: 'MongoDB 是一个 Nosql 数据库',
by: 'tre',
url: 'http://www.tre.com',
tags: ['mongodb', 'database', 'NoSQL'],
likes: 100
})

查看已插入文档:

db.col.find()
{ "_id" : ObjectId("5f18f92eb5775c49914787b3"), "title" : "我是一個标题", "description" : "MongoDB 是一个 Nosql 数据库", "by" : "tre", "url" : "http://www.tre.com", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 100 }

也可以将数据定义为一个变量,如下所示:

> document=({title: '我是一個标题',
description: 'MongoDB 是一个 Nosql 数据库',
by: 'tre',
url: 'http://www.tre.com',
tags: ['mongodb', 'database', 'NoSQL'],
likes: 100
});

执行插入操作:

>db.col.insert(document)
WriteResult({ "nInserted" : 1 })

更新文档

update() 方法用于更新已存在的文档。语法格式如下:

db.collection.update(
<query>,
<update>,
{
upsert: <boolean>,
multi: <boolean>,
writeConcern: <document>
}
)

参数说明:

  • query : update的查询条件,类似sql update查询内where后面的。
  • update : update的对象和一些更新的操作符(如,inc...)等,也可以理解为sql update查询内set后面的
  • upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
  • multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
  • writeConcern :可选,抛出异常的级别。
实例

通过 update() 方法来更新标题(title):

>db.col.update({'title':'我是一個标题'},{$set:{'title':'我是一个标题'}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }) # 输出信息

> db.col.find().pretty()
{
"_id" : ObjectId("5f18f92eb5775c49914787b3"),
"title" : "我是一个标题",
"description" : "MongoDB 是一个 Nosql 数据库",
"by" : "tre",
"url" : "http://www.tre.com",
"tags" : [
"mongodb",
"database",
"NoSQL"
],
"likes" : 100
}

以上语句只会修改第一条发现的文档,如果你要修改多条相同的文档,则需要设置 multi 参数为 true。

>db.col.update({'title':'我是一個标题'},{$set:{'title':'我是一个标题'}},{multi:true})
WriteResult({ "nMatched" : 2, "nUpserted" : 0, "nModified" : 2 })

save() 方法

save() 方法通过传入的文档来替换已有文档,_id 主键存在就更新,不存在就插入。语法格式如下:

db.collection.save(
<document>,
{
writeConcern: <document>
}
)

参数说明:

  • document : 文档数据。
  • writeConcern :可选,抛出异常的级别。
    实例

>db.col.save({
"_id" : ObjectId("56064f89ade2f21f36b03136"),
"title" : "我是一個标题",
"description" : "MongoDB 是一个 Nosql 数据库",
"by" : "tre",
"url" : "http://www.tre.com",
"tags" : [
"mongodb",
"NoSQL"
],
"likes" : 110
})

通过 find() 命令来查看替换后的数据

>db.col.find().pretty()
{
"_id" : ObjectId("5f18f92eb5775c49914787b3"),
"title" : "我是一个标题",
"description" : "MongoDB 是一个 Nosql 数据库",
"by" : "tre",
"url" : "http://www.tre.com",
"tags" : [
"mongodb",
"database",
"NoSQL"
],
"likes" : 100
}

删除文档

remove() 方法的基本语法格式如下所示:

>db.collection.remove(
<query>,
{
justOne: <boolean>,
writeConcern: <document>
}
)

参数说明:

  • query :(可选)删除的文档的条件。
  • justOne : (可选)如果设为 true 或 1,则只删除一个文档,如果不设置该参数,或使用默认值 false,则删除所有匹配条件的文档。
  • writeConcern :(可选)抛出异常的级别。

实例
我们移除 title 为 '我是一個标题' 的文档:

>db.col.remove({'title':'我是一個标题'})
WriteResult({ "nRemoved" : 1 })

如果想删除所有数据,可以使用以下方式

>db.col.remove({})

查询文档

MongoDB 查询数据的语法格式如下:

db.collection.find(query, projection)

  • query :可选,使用查询操作符指定查询条件
  • projection :可选,使用投影操作符指定返回的键。查询时返回文档中所有键值, 只需省略该参数即可(默认省略)。
    如果需要以易读的方式来读取数据,可以使用 pretty() 方法,语法格式如下:

db.col.find().pretty()

pretty() 方法以格式化的方式来显示所有文档。

以下实例我们查询了集合 col 中的数据:

> db.col.find().pretty()
{
        "_id" : ObjectId("5f18f92eb5775c49914787b3"),
        "title" : "我是一个标题",
        "description" : "MongoDB 是一个 Nosql 数据库",
        "by" : "tre",
        "url" : "http://www.tre.com",
        "tags" : [
                "mongodb",
                "database",
                "NoSQL"
        ],
        "likes" : 100
}
{
        "_id" : ObjectId("5f18f9d8b5775c49914787b4"),
        "title" : "我是一个标题",
        "description" : "MongoDB 是一个 Nosql 数据库",
        "by" : "tre",
        "url" : "http://www.tre.com",
        "tags" : [
                "mongodb",
                "database",
                "NoSQL"
        ],
        "likes" : 100
}
{
        "_id" : ObjectId("5f18f9dab5775c49914787b5"),
        "title" : "我是一个标题",
        "description" : "MongoDB 是一个 Nosql 数据库",
        "by" : "tre",
        "url" : "http://www.tre.com",
        "tags" : [
                "mongodb",
                "database",
                "NoSQL"
        ],
        "likes" : 100
}
AND 条件

MongoDB 的 find() 方法可以传入多个键(key),每个键(key)以逗号隔开,即常规 SQL 的 AND 条件。

语法格式如下:

db.col.find({key1:value1, key2:value2}).pretty()

> db.col.find({"by":"tre", "title":"我是一个标题"}).pretty()
{
        "_id" : ObjectId("5f18f92eb5775c49914787b3"),
        "title" : "我是一个标题",
        "description" : "MongoDB 是一个 Nosql 数据库",
        "by" : "tre",
        "url" : "http://www.tre.com",
        "tags" : [
                "mongodb",
                "database",
                "NoSQL"
        ],
        "likes" : 100
}
{
        "_id" : ObjectId("5f18f9d8b5775c49914787b4"),
        "title" : "我是一个标题",
        "description" : "MongoDB 是一个 Nosql 数据库",
        "by" : "tre",
        "url" : "http://www.tre.com",
        "tags" : [
                "mongodb",
                "database",
                "NoSQL"
        ],
        "likes" : 100
}
{
        "_id" : ObjectId("5f18f9dab5775c49914787b5"),
        "title" : "我是一个标题",
        "description" : "MongoDB 是一个 Nosql 数据库",
        "by" : "tre",
        "url" : "http://www.tre.com",
        "tags" : [
                "mongodb",
                "database",
                "NoSQL"
        ],
        "likes" : 100
}
OR 条件

MongoDB OR 条件语句使用了关键字 $or,语法格式如下:

>db.col.find(
{
$or: [
{key1: value1}, {key2:value2}
]
}
).pretty()

以下实例中,我们演示了查询键 by 值为 tre 或键 title 值为 我是一个标题 的文档。
db.col.find({$or:[{"by":"tre"},{"title": "我是一个标题"}]}).pretty()

> db.col.find({$or:[{"by":"tre"},{"title": "我是一个标题"}]}).pretty()
{
        "_id" : ObjectId("5f18f92eb5775c49914787b3"),
        "title" : "我是一个标题",
        "description" : "MongoDB 是一个 Nosql 数据库",
        "by" : "tre",
        "url" : "http://www.tre.com",
        "tags" : [
                "mongodb",
                "database",
                "NoSQL"
        ],
        "likes" : 100
}
{
        "_id" : ObjectId("5f18f9d8b5775c49914787b4"),
        "title" : "我是一个标题",
        "description" : "MongoDB 是一个 Nosql 数据库",
        "by" : "tre",
        "url" : "http://www.tre.com",
        "tags" : [
                "mongodb",
                "database",
                "NoSQL"
        ],
        "likes" : 100
}
{
        "_id" : ObjectId("5f18f9dab5775c49914787b5"),
        "title" : "我是一个标题",
        "description" : "MongoDB 是一个 Nosql 数据库",
        "by" : "tre",
        "url" : "http://www.tre.com",
        "tags" : [
                "mongodb",
                "database",
                "NoSQL"
        ],
        "likes" : 100
}

相关文章

网友评论

      本文标题:MongoDB 文档

      本文链接:https://www.haomeiwen.com/subject/ehyclktx.html