【MongoDB学习笔记】3:对文档的基本操作

认识BSON

BSON是Binary JSON,语法和JSON很类似。在MongoDB里,使用BSON来存储信息,其结构如:

{
key1:value1,
key2:value2,
...
}

value本身可以是MongoDB的数据类型,也可以是一个BSON体(形成嵌套)。

插入/查看/更新文档

文档是一组(即若干对)键值对,也就是一个BSON结构体。和RDBMS比较,MongoDB中的文档就相当于RDBMS中的一个元组了。文档存放在集合中就如元组存放在表中。

向集合中插入文档

在指定的db下,使用

db.集合名.insert(BSON结构体形式的文档)

完成向该数据库中的指定集合插入一个文档。

> db.lzhCllctn1.insert({
... name:'刘知昊',
... age:21,
... height:183,
... weight:73,
... type:'sb',
... likes:['eating','coding','flora']
... })
WriteResult({ "nInserted" : 1 })
>

查看集合中的文档

在指定的db下,使用

db.集合名.find()

来查看该集合中的所有文档。

> db.lzhCllctn1.find()
{ "_id" : ObjectId("5b2921a1731bfd60bffa814f"), "name" : "刘知昊", "age" : 21, "
height" : 183, "weight" : 73, "type" : "sb", "likes" : [ "eating", "coding", "fl
ora" ] }
>

可以看到MongoDB自动为它设置了一个_id作为主键。

Update集合中的某些文档

在指定的DB下,使用

db.集合名.update(
    {
        更新条件
    },
    {
        更新的具体内容
    },
    {
        upsert: 无更新目标时是否插入,
        multi: 是否更新全部,
        writeConcern: 抛出异常的级别
    }
)

来完成对指定集合中文档的更新。其中,最后一个BSON里的三个参数都是可选的,当三个参数都不使用时,要去掉这个BSON。

upsert为true时,若更新条件下匹配不到要更新的文档,则会插入这个文档。

multi为true时,MongoDB会更新满足更新条件的所有文档,而不是默认的仅第一条文档。

> db.lzhCllctn1.update(
... {
... age:21
... },
... {
... $set:{'name':'lzh'}
... },
... {
... multi:true
... }
... )
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.lzhCllctn1.find()
{ "_id" : ObjectId("5b2921a1731bfd60bffa814f"), "name" : "lzh", "age" : 21, "hei
ght" : 183, "weight" : 73, "type" : "sb", "likes" : [ "eating", "coding", "flora
" ] }
>

因为只有这一条符合条件的文档,所以结果和

> db.lzhCllctn1.update(
... {
... age:21
... },
... {
... $set:{'name':'lzh'}
... }
... )

是一样的。

Save集合中的某些文档

在指定的DB下,使用

db.collection.save(
    {
        新文档的键值对组
    },
    {
        writeConcern: 抛出异常的级别
    }
)

来用传入的新文档替换相同_id的文档。writeConcern参数还是可选的。

> db.lzhCllctn1.save(
... {
... '_id':ObjectId("5b2921a1731bfd60bffa814f"),
... 'name':'SbLZHSbSbSb',
... 'age':'try to change type',
... tryadd:'try to add new k-v',
... height:138,
... type:'big sb'
... }
... )
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.lzhCllctn1.find()
{ "_id" : ObjectId("5b2921a1731bfd60bffa814f"), "name" : "SbLZHSbSbSb", "age" :
"try to change type", "tryadd" : "try to add new k-v", "height" : 138, "type" :
"big sb" }
>

可以看到,给key加不加引号都行,而且在MongoDB对文档的修改操作中,即使改了原来value的数据类型,甚至新增或删除某些K-V,都是没问题的。

格式化显示BSON

使用

返回BSON的函数.pretty()

能将返回的BSON格式化显示。

> db.lzhCllctn1.find().pretty()
{
        "_id" : ObjectId("5b2921a1731bfd60bffa814f"),
        "name" : "SbLZHSbSbSb",
        "age" : "try to change type",
        "tryadd" : "try to add new k-v",
        "height" : 138,
        "type" : "big sb"
}
>

这样看起来就清楚多了。

猜你喜欢

转载自blog.csdn.net/shu15121856/article/details/80740201