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. 常见模式

- 引用模式
内嵌文档太大,数MB或者超过16MB
内嵌文档或数组元素会频繁修改
内嵌数组元素会持续增长并且没有封顶 - 分桶
时间段的 内嵌数组(多字段合并到一个数组) - 列转行
内嵌数组(多字段合并到一个数组), 一个索引即可 - 版本字段
版本衍变时增加一个版本号字段 - 近似计算
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});
4271

被折叠的 条评论
为什么被折叠?



