mongodb|文档操作---增删查

- 文档管理

#数据类型

| Type               | 描述                                                         |
| ------------------ | ------------------------------------------------------------ |
| **ObjectID**       | 用于存储文档的ID,相当于主键,mongoDB中就是一个对象的返回值   |
| **String**         | 字符串是最常用的数据类型,MongoDB中的字符串必须是UTF-8编码。 |
| **Integer**        | 整数类型用于存储数值。整数可以是32位,也可以是64位,这取决于你的服务器。 |
| **Double**         | 双精度类型用于存储浮点值,mongodb中没有float浮点数这个说法    |
| **Boolean**        | 布尔类型用于存储布尔值(true/ false)                          |
| **Arrays**         | 将数组、列表或多个值存储到一个键                             |
| **Timestamp**      | 时间戳,用于记录文档何时被修改或创建。Date(),Timestamp(),ISODate() |
| **Object**         | 用于嵌入文档, 相当于子属性是另一个json而已                   |
| **Null**           | 空值,相当于 python的None                                     |
| Symbol             | 与字符串用法相同,常用于某些使用特殊符号的语言               |
| Date               | 用于以UNIX时间格式存储当前日期或时间。                       |
| **Binary data**    | 二进制数据                                                   |
| Code               | 用于将JavaScript代码存储到文档中                             |
| Regular expression | 正则表达式                                                   |



#### 添加文档

>   文档的数据结构和 JSON 基本一样。所有存储在集合中的数据都是 BSON 格式。
>
>   BSON 是一种类似 JSON 的二进制形式的存储格式,是 Binary JSON 的简称。

```javascript
# 添加文档
# 方式1:
db.集合.insert(<document>)  # document就是一个json

# 方式2:       
db.集合.insertOne(          # 如果文档存在_id主键为更新数据,否则就添加数据。
   <document>
)

# 方式3
# 一次性添加多个文档, 多次给同一个集合建议使用insertMany比insertOne效率更好
db.集合.insertMany(
   [ <document> , <document>, ... ]
)
```

操作:

```javascript
use mofang;

// 添加一条数据
db.user_list.insert({"name":"laoli","age":33,"sex":true,"child":{"name":"xiaohuihui","age":3}});
// WriteResult({ "nInserted" : 1 })

// 添加一条数据
db.user_list.insertOne({"name":"xiaozhang","age":18,"sex":true});
// {
//     "acknowledged" : true,
//     "insertedId" : ObjectId("605021e6d5c7a55cc95c1cb7")
// }


// 添加多条数据
document1 = {"name":"xiaolan","age":16}
document2 = {"name":"xiaoguang","age":16}
db.user_list.insertMany([document1,document2]);

// {
//     "acknowledged" : true,
//     "insertedIds" : [
//         ObjectId("60502235d5c7a55cc95c1cba"),
//         ObjectId("60502235d5c7a55cc95c1cbb")
//     ]
// }

```



#### 删除文档

```json
db.集合.remove(
   <query>,  // removed的条件,一般写法:{"属性":{条件:值}},如果不填写条件,删除所有文档
   {
     justOne: <boolean>,      // 可选删除,是否只删除查询到的第一个文档,默认为false,删除所有
     writeConcern: <document> // 可选参数,抛出异常的级别。
   }
)
```

操作:

```javascript
// 删除满足条件的第一条数据
db.user_list.remove({"age":17},{"justOne":true})
// 删除满足条件的所有数据
db.user_list.remove({"name":"laowang"});
```



#### 查询文档

```json
// 直接显示查询的所有,find和findOne的第二个参数,也是一个json对象,一般称之为字段投影,表示设置是否显示或隐藏指定数据字段。
// 获取一条
db.集合.findOne(
    <query>,     // 查询条件
    {
        <key>: 0, // 隐藏指定字段,例如:"_id":0,
        <key>: 1, // 显示指定字段,例如:"title":1,
        ....
    }
)
// 获取多条
db.集合.find(
    <query>,      // 查询条件
    {
        <key>: 0, // 隐藏指定字段,例如:"_id":0,
        <key>: 1, // 显示指定字段,例如:"title":1,
        ....
    }
)

# 以易读的方式来格式化显示读取到的数据,只能在find方法后面使用。
db.集合.find().pretty()
```

 示例:

db.user_list.find()
{ "_id" : ObjectId("61a4dd1106540c0fb8f363ee"), "name" : "xiaolan", "age" : 16 }
{ "_id" : ObjectId("61a4dd1106540c0fb8f363ef"), "name" : "xiaoguang", "age" : 16 }
{ "_id" : ObjectId("61a57d01ee212c0f351ca60f"), "name" : "laoli", "age" : 33, "sex" : true, "child" : { "name" : "xiaohuihui", "age" : 3 } }
{ "_id" : ObjectId("61a57d5dee212c0f351ca613"), "name" : "xiaozhang", "age" : 18, "sex" : true }
{ "_id" : ObjectId("61a57d5fee212c0f351ca614"), "name" : "xiaozhang", "age" : 18, "sex" : true }
> db.user_list.find().pretty()
{
        "_id" : ObjectId("61a4dd1106540c0fb8f363ee"),
        "name" : "xiaolan",
        "age" : 16
}
......
 db.user_list.findOne()
{
        "_id" : ObjectId("61a4dd1106540c0fb8f363ee"),
        "name" : "xiaolan",
        "age" : 16
}
> db.user_list.findOne()._id
ObjectId("61a4dd1106540c0fb8f363ee")
> db.user_list.findOne().name
xiaolan
> db.user_list.find({},{"_id":0})   # 不显示id,0表示隐藏id
{ "name" : "xiaolan", "age" : 16 }
{ "name" : "xiaoguang", "age" : 16 }
{ "name" : "laoli", "age" : 33, "sex" : true, "child" : { "name" : "xiaohuihui", "age" : 3 } }
{ "name" : "xiaozhang", "age" : 18, "sex" : true }
{ "name" : "xiaozhang", "age" : 18, "sex" : true }
> db.user_list.find({},{"name":1})
{ "_id" : ObjectId("61a4dd1106540c0fb8f363ee"), "name" : "xiaolan" }
{ "_id" : ObjectId("61a4dd1106540c0fb8f363ef"), "name" : "xiaoguang" }
{ "_id" : ObjectId("61a57d01ee212c0f351ca60f"), "name" : "laoli" }
{ "_id" : ObjectId("61a57d5dee212c0f351ca613"), "name" : "xiaozhang" }
{ "_id" : ObjectId("61a57d5fee212c0f351ca614"), "name" : "xiaozhang" }
> db.user_list.find({},{"name":1,"_id":0})
{ "name" : "xiaolan" }
{ "name" : "xiaoguang" }
{ "name" : "laoli" }
{ "name" : "xiaozhang" }
{ "name" : "xiaozhang" }
> db.user_list.find({"age":{$lt:18}})   # 小于
{ "_id" : ObjectId("61a4dd1106540c0fb8f363ee"), "name" : "xiaolan", "age" : 16 }
{ "_id" : ObjectId("61a4dd1106540c0fb8f363ef"), "name" : "xiaoguang", "age" : 16 }
> db.user_list.find({"age":{$lte:18}})   #小于等于
{ "_id" : ObjectId("61a4dd1106540c0fb8f363ee"), "name" : "xiaolan", "age" : 16 }
{ "_id" : ObjectId("61a4dd1106540c0fb8f363ef"), "name" : "xiaoguang", "age" : 16 }
{ "_id" : ObjectId("61a57d5dee212c0f351ca613"), "name" : "xiaozhang", "age" : 18, "sex" : true }
{ "_id" : ObjectId("61a57d5fee212c0f351ca614"), "name" : "xiaozhang", "age" : 18, "sex" : true }
> db.user_list.find({"age":{$gt:18}})
{ "_id" : ObjectId("61a57d01ee212c0f351ca60f"), "name" : "laoli", "age" : 33, "sex" : true, "child" : { "name" : "xiaohuihui", "age" : 3 } }
> db.user_list.find({"age":{$gte:18}})
{ "_id" : ObjectId("61a57d01ee212c0f351ca60f"), "name" : "laoli", "age" : 33, "sex" : true, "child" : { "name" : "xiaohuihui", "age" : 3 } }
{ "_id" : ObjectId("61a57d5dee212c0f351ca613"), "name" : "xiaozhang", "age" : 18, "sex" : true }
{ "_id" : ObjectId("61a57d5fee212c0f351ca614"), "name" : "xiaozhang", "age" : 18, "sex" : true }
> db.user_list.find({"age":{$in:[16,33]}})   # 在16到33之间
{ "_id" : ObjectId("61a4dd1106540c0fb8f363ee"), "name" : "xiaolan", "age" : 16 }
{ "_id" : ObjectId("61a4dd1106540c0fb8f363ef"), "name" : "xiaoguang", "age" : 16 }
{ "_id" : ObjectId("61a57d01ee212c0f351ca60f"), "name" : "laoli", "age" : 33, "sex" : true, "child" : { "name" : "xiaohuihui", "age" : 3 } }

 # and   or查询

// 查询age=18 并且 sex=true
db.user_list.find({
    $and:[
        {"age":{$eq:18}},
        {"sex":{$eq:true}}
    ]
})
// 简写:
db.user_list.find({
    $and:[
        {"age":18},
        {"sex":true}
    ]
})
// 继续简写;
db.user_list.find({ "age":18, "sex":true})

// 查询age=16或者age=18
db.user_list.find({
    $or:[
        {"age":{$eq:16}},
        {"age":{$eq:18}}
    ]
})

// 查询年龄!=16的
db.user_list.find({"age":{$not:{$eq:16}}})
db.user_list.find({"age":{$ne:16}})


// 查询age=33的男生 或者 age=18的男生
db.user_list.find({
    "sex":true,
    $or:[
        {"age":18},
        {"age":33}
    ]
});

db.user_list.find({
    "sex":true,
    "age":{
        $in:[18,33]
     }
});

db.user_list.find({
    $or:[
        {$and:[{"sex":true},{"age":18}]},
        {$and:[{"sex":true},{"age":33}]},
    ]
});

db.user_list.find({
    $or:[
        {"sex":true,"age":18},
        {"sex":true,"age":33},
    ]
});

 

posted @ 2021-11-30 09:12  urls  阅读(39)  评论(0编辑  收藏  举报