MongoDB

1. 搜索

在数组中搜索子对象的多个字段时,如果使用$elemMatch,它表示必须是同一个子对象满足多个条件

db.getCollection('movies').find({
"filming_locations": {
$elemMatch:{"city":"Rome", "country": "USA"}
}})

2. 更新

Update操作执行格式:db.<集合>.update(<查询条件>, <更新字段>)

db.fruit.insertMany([{name: "apple"},{name: "pear"},{name: "orange"}])
db.fruit.updateOne({name: "apple"}, {$set: {from: "China"}})

●使用updateOne表示无论条件匹配多少条记录,始终只更新第一条;
●使用updateMany表示条件匹配多少条就更新多少条;●updateOne/updateMany方法要求更新条件部分必须具有以下之一,否则将报错:

•$set/$unset
•$push/$pushAll/$pop
•$pull/$pullAll
•$addToSet

●$push: 增加一个对象到数组底部
●$pushAll: 增加多个对象到数组底部
●$pop: 从数组底部删除一个对象
●$pull: 如果匹配指定的值,从数组中删除相应的对象
●$pullAll: 如果匹配任意的值,从数据中删除相应的对象
●$addToSet: 如果不存在则增加一个值到数组

3. 模式

1. MongoDB引用设计的限制

MongoDB 对使用引用的集合之间并无主外键检查
MongoDB使用聚合框架的$lookup 来模仿关联查询
$lookup只支持leftouterjoin
$lookup 的关联目标(from)不能是分片表

2. 常见模式

在这里插入图片描述

  1. 引用模式
    内嵌文档太大,数MB或者超过16MB
    内嵌文档或数组元素会频繁修改
    内嵌数组元素会持续增长并且没有封顶
  2. 分桶
    时间段的 内嵌数组(多字段合并到一个数组)
  3. 列转行
    内嵌数组(多字段合并到一个数组), 一个索引即可
  4. 版本字段
    版本衍变时增加一个版本号字段
  5. 近似计算

4.备份,恢复

在Ubuntu中使用apt安装MongoDB时,默认的数据存放位置为/var/lib/mongodb

#默认备份到当前dump目录下. mydb是db名字
mongodump --db mydb  
#指定目录
mongodump --out /home/user/backup
mongorestore /home/user/backup

5. 命令行

1.count方法的替换方法的用法

如果正在使用MongoDB 4.0或更高版本,建议使用countDocuments方法来替换count方法。以下是一个简单的示例:

const MongoClient = require('mongodb').MongoClient;

const uri = 'mongodb://localhost:27017';
const client = new MongoClient(uri, { useNewUrlParser: true, useUnifiedTopology: true });

client.connect(err => {
if (err) {
console.error(err);
return;
}

const collection = client.db('mydb').collection('mycollection');

// 使用countDocuments方法获取文档数量
collection.countDocuments()
.then(count => console.log(`文档数量为 ${count}`))
.catch(err => console.error(err))
.finally(() => client.close());
});

const total = await db.collection("tr")
	.countDocuments({"id": {$ne: null, $exists: true}});

2.查找并修改

db.tran.findOneAndUpdate({ transactionId: "db740c73-e543-445a-95c5-0e48c917e9ed" }, { $set: { "idDoc.result.status.result": "Passed" } }, { new: true });

db.tran.find({transactionId: "5e7b77c1-d05e-4f63-b60b-e1d1f9c663e3"}, {faceMatch: 1, idDoc: 1});

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值