MongoDB

Mongo教程总结

最详细的还是官方文档 https://docs.mongodb.com/manual/mongo/
Java 驱动文档 https://mongodb.github.io/mongo-java-driver/4.1/driver/tutorials/databases-collections/

> show dbs

> db.inventory.insertOne({ item: "canvas", qty: 100, tags: ["cotton"], size: { h: 28, w: 35.5, uom: "cm" } })

> db.inventory.find().pretty

基本操作

centos 7安装

下载安装包,并解压

测试安装包是否可用

配置PATH变量

  • 修改文件
    vim /etc/profile
    在这里插入图片描述

使得环境变量生效
source /etc/profile
当可以不在mongo 目录下的bin 目录 运行 mongo 命令时 则环境变量生成成功

touch mongodb.conf
mkdir db
mkdir log

Mongo 数据样例

windows启动——cmd

D:\MongoDB\Server\4.4\bin> mongod --dbpath D:\MongoDB\Server\4.4\data

一些工具,如备份(mongodump)与恢复(mongorestore),需要单独下载,对应工具下载:https://www.mongodb.com/try/download/database-tools

可能的问题

  1. Windows 无法启动MongoDB服务 错误1067:进程意外终止
    net start MongoDB
    【解决】:重新配置 配置文件 进入MongoDB安装目录\data\将此文件夹下的mongod.lock删除

mongod.exe --config 【路径】\MongoDB\mongod.cfg --remove

mongod.exe --config 【路径】\MongoDB\mongod.cfg --install

  1. 无法访问: 使用管理员权限
{
    "_id" : ObjectId("600a6785a092642696f9e6bb"),
    "processStage" : {
        "asdasd" : 6565.0,
        "qwe" : 6565.0
    },
    "address_ids" : [ 
        ObjectId("52ffc4a5d85242602e000000"), 
        ObjectId("52ffc4a5d85242602e000001")
    ],
    "forecast" : [ 
        {
            "id" : ObjectId("600a6785a092642696f9e6bc"),
            "sunrise" : "06:17"
        }, 
        {
            "date" : "26日星期一",
            "sunrise" : "06:11"
        }, 
        "spring", 
        "data", 
        "mongodb"
    ],
    "code" : "C02D25H7ML85",
    "qweqwe" : 56.0
}

查询

public static <T> void main(String[] args) {

    MongoOperations mongoOps = new MongoTemplate(MongoClients.create(), "test");
    MongoCollection<Document> collection  = mongoOps.getCollection("647台阿里索电维修_assert");
    Bson bson = Filters.eq("status", "维修");
    FindIterable<Document> documents = collection.find(bson);
    for(Document document : documents) {
        System.out.println(document.get("data").toString());
        System.out.println(document.toJson());
    }
}

MongoDB CRUD Operations

一、 插入

【方法】insert / save, insertOne/ insertMany

插入文档

如果该集合不在该数据库中, MongoDB 会自动创建该集合并插入文档。

db.getCollection('test_data').insert(
[
 {No : 10, SS : "ss" }, 
 {No : 6, SS : "zz"}
],
{
 ordered : true
}
)
db.col.insert(
{
    description: 'MongoDB',
    tags: ['mongodb', 'database', 'NoSQL'],
    likes: 100
})

*主键重复时

①save (覆盖),②insert(报错)

insertOne  新增第一个
insert / insertMany 新增多个

二、更新

【方法】 update / save, updateOne / updateMany/ replaceOne

save() 方法通过传入的文档来替换已有文档,_id 主键存在就更新,不存在就插入
更新文档时 必须 加上 _id (覆盖式更新,否则会新增)

在这里插入代码片

对比

save 更新 必须 加上 _id ——覆盖式更新
replaceOne 不需要 _id 只更新匹配的第一个

$set
$[i]
arrayFilter 筛选数组中元素的条件
db.getCollection('test_data').updateOne(
{
    _id: ObjectId("5ac1ff4c87c0fc67c0f4fe60"),
    workerStats: {
        $elemMatch: {
            stage: "LABEL",
            idOfWorker: "admin"
        }
    }
},
{
    $inc: {
        "workerStats.$.stats.labeledItems": 1
    }
})

三、 删除

【方法】: remove / deleteMany/ deleteOne

1. remove 删除 文档

四、 查询

【方法】:find/ findOne

条件查询

聚合

map-reduce

db.getCollection('asset_statistics').mapReduce( 
   function() { emit(this.createBy, this.count); }, 
   function(mkey, values) { return values}, 
      {  
         out:"post_total"
      }
).find()

另一种形式:

var mapFunction1 = function() {
   emit(this.cust_id, this.price);
};
var reduceFunction1 = function(keyCustId, valuesPrices) {
   return Array.sum(valuesPrices);
};
db.orders.mapReduce(
   mapFunction1,
   reduceFunction1,
   { out: "map_reduce_example" }
)
db.map_reduce_example.find().sort( { _id: 1 } )

Array.sum() 对于 数组类型为 NumberLong 数据求和,当size=1时会出错,普通number不会,所以这里我们自己求和:

db.getCollection('asset_statistics').mapReduce( 
   function() { emit(this.createBy, this.count); }, 
   function(mkey, values) { 
       var sum = 0;
        for(var temp in values) {
            sum = sum + values[temp];
        }
        return sum
   },{  
         out:"post_total"
      }
).find()
db.orders.mapReduce(
   function() {
        emit(this.cust_id, this.price);
    },
    function(keyCustId, valuesPrices) {
            return Array.sum(valuesPrices);
    },
   { out: "map_reduce_example" }
).find()

遇到的问题记录

Java 操作

  1. Invalid BSON field name xx

之前的

 mongoCollection.updateOne( 
 documentFilter, parameter); 

更改

mongoCollection.updateOne( 
documentFilter, new Document("$set", parameter)); ```

注:更新文档的值 时需要 使用 $set

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值