mongodb nodejs 高级用例 基本上实现了sql 能做到的一切

以下例子 包含的 插入 删除 修改 查询 左联接 右联接, 内联接 等 基本上实现了sql 能做到的一切

import mongo from "mongodb";
const MongoClient = mongo.MongoClient;
var url = "mongodb://test:test@192.168.0.147:27017/test";
var conn = await MongoClient.connect(url, { useUnifiedTopology: true });
let db = conn.db("test")

export async function use测试表() {
    return db.collection("group")
}

var testg = await use测试表();
//console.log("--------1-插入简单测试数据-------")
// await testg.insertOne({name:"22",age:58,cnt:4}).then(v=>console.log(v.insertedId))
// await testg.insertOne({name:"33",age:24,cnt:3}).then(v=>console.log(v.insertedId))
// await testg.updateOne({name:"22"},{$set:{"age":32},$inc:{cnt:1}})//自增
// await testg.find({}).forEach(v => console.log(v))
// await testg.findOne({name:"222"}).then(v => console.log("v=",v))
console.log("--------1.1 drop--------")
await testg.drop()
// await testg.find({}).forEach(v => console.log(v))
console.log("--------2-追加复杂测试数据-------")
var doc = {
    name: "dd2",
    friends: [{ id: "dd1", na: 2 }, { id: "cd", na: 3 }, { id: "bd", na: 8 }, { id: "dd", na: 81 }],
    arrt: { "mm": 1, "pp": 2, "kk": 3 },
    count: 99
};
await testg.insertOne(doc)
doc = {
    name: "dd1",
    friends: [{ id: "dd2", na: 2 }, { id: "cd", na: 5 }, { id: "bd", na: 8 }, { id: "dd", na: 9 }],
    arrt: { "mm": 1, "pp": 21, "kk": 32 },
    count: 88
};
await testg.insertOne(doc)
doc = {
    name: "dd3",
    friends: [{ id: "dd2", na: 2 }, { id: "cd", na: 5 }, { id: "bd", na: 8 }, { id: "dd", na: 9 }],
    arrt: { "mm2": 1, "pp": 21, "kk": 32 },
    count: 88
};
await testg.insertOne(doc)
// await testg.find({}).forEach(v => console.log(v))
// console.log("--------3 查询--------")
// await testg.find({ "friends.id": "dd1" }).forEach(v => console.log(v))
// console.log("--------3.1--------")
// await testg.updateOne({ "friends.id": "dd1" }, { $pull: { friends: { id: "cd" } } })
// await testg.find({}).forEach(v => console.log(v))
// console.log("--------3.1 异常捕捉--------")
// try {
//     await testg.updateOne({ "friends.id": "dd2" }, { $pull: { "friends.id": "cd" } })//这个"friends.id" 写法是不允许的
// } catch { }
// console.log("--------3.2--修改数组项中指定项------")
// await testg.updateOne({"friends.id":"dd1"},{$set:{ "friends.$": {id:"dd0" }}}) //改变数组匹配项
// await testg.find({}).forEach(v=>console.log(v))
// console.log("--------3.2--修改数组项中所有------")
// await testg.updateOne({"friends.id":"dd0"},{$set:{ "friends.$[]": {id:"dd1" }}}) //改变数组每个项
// await testg.find({}).forEach(v=>console.log(v))

// console.log("--------3.3--修改数组项中指定项------")
// await testg.updateOne({ "friends.id": "dd1" }, { $set: { "friends.$.id": "dd0" } }) //改变匹配数组匹配项中的id值
// await testg.find({}).forEach(v => console.log(v))
// console.log("--------3.3--修改数组项中所有------")
// await testg.updateOne({ "friends.id": "dd0" }, { $set: { "friends.$[].id": "dd3" } })//改变匹配数组每个项中的id值
// await testg.find({}).forEach(v => console.log(v))
// console.log("--------3.4--修改数组项中所有------")
// await testg.updateOne({ "friends.id": "dd2" }, { $set: { "friends.$[t1].id": "dd09" } }, {
//     multi: true,
//     arrayFilters: [{ "t1.na": 8 }]
// })
// await testg.find({}).forEach(v => console.log(v))


console.log("-------- 4-对象子集的增减改 -------")
// await testg.find({name:"dd1"}).forEach(v=>console.log(v))
// await testg.updateOne({name:"dd1"},{$set:{"arrt.yy":{name:"zz",age:12},"arrt.yy2":{name:"zz",age:12},"arrt.pp":44}}) //只要属性不同就会新增
// await testg.find({name:"dd1"}).forEach(v=>console.log(v))
// await testg.updateOne({name:"dd1"},{$unset:{"arrt.yy":null}})//{"arrt.yy":值随便写 都能删除}
// await testg.updateOne({name:"dd1"},{$unset:{arrt:{yy2:null}}})//会把 arrt所有 属性都删除
// await testg.find({name:"dd1"}).forEach(v=>console.log(v))
// let k="s";
// await testg.updateOne({name:"dd1"},{$set:{["arrt."+k]:"22"}}) //动态修改某个属性
// await testg.find({name:"dd1"}).forEach(v=>console.log(v))
// await testg.updateOne({name:"dd1"},{$unset:{"arrt.s":"","arrt.yy":""}})//注销属性
// await testg.find({name:"dd1"}).forEach(v=>console.log(v))
// await testg.updateOne({name:"dd1"},{$set:{"friends":[]}})//清空数组类型属性
// await testg.find({name:"dd1"}).forEach(v=>console.log(v))

// console.log("--------5 对象子集的查询--------")

//await testg.find({"arrt.mm2":{$exists:false}}).forEach(v=>console.log("1",v))//查找 某个属性集中不存在 某属性的所有文档
//await testg.find({"arrt.mm":{$exists:true}}).forEach(v=>console.log("2",v))//查找 某个属性集中存在 某属性的所有文档
// await testg.find({"arrt.mm":0}).forEach(v=>console.log("3",v))//查找 某个属性集中属性值为0的所有文档
// await testg.find({"arrt.mm":1}).forEach(v=>console.log("4",v))//查找 某个属性集中属性值为1 的所有文档
//await testg.find({"arrt.mm":null}).forEach(v=>console.log("5",v))//查找 某个属性集中不存在 某属性的所有文档

// console.log("--------6 数组子集的修改--------")
// await testg.find({name:"dd1"}).forEach(v=>console.log(v))
// await testg.updateOne({name:"dd1"},{$push:{"friends": { id: "a1", na: 51 },}})//插入对象到宿主元素
// await testg.find({name:"dd1"}).forEach(v=>console.log(1,v))
// await testg.updateOne({name:"dd1"},{$push:{"friends":'dv2'}})//插入单个数组元素
// await testg.updateOne({name:"dd1"},{$push:{"friends":['dv3','dv4']}})//插入多个数组元素
// await testg.updateOne({name:"dd1"},{$push:{"friends":'dv3'}})
// await testg.updateOne({name:"dd1"},{$push:{"friends":'dv4'}})
// await testg.find({name:"dd1"}).forEach(v=>console.log(v))
// await testg.updateOne({name:"dd1"},{$pop:{"friends":-1}})//删除第一个
// await testg.find({name:"dd1"}).forEach(v=>console.log(2,v))
// await testg.updateOne({name:"dd1"},{$pop:{"friends":1}})//删除最后一个
// await testg.find({name:"dd1"}).forEach(v=>console.log(3,v))
//$pop 与 push 不能同时使用



// await testg.findOne({name:"dd1"}).then(doc=>{ //查询后更新
//     //console.log(doc)
//     var count=(doc.count+1);
//     testg.updateOne({name:"dd1"}, {$set: { i记录数: 10 ,count:count},$push: { "friends":  { id: "a"+count, na: 32 } }});
// })

// await testg.find({name:"dd1"}).forEach(v=>console.log(4,v))
// await testg.findOne({name:"dd11"}).then(v=>console.log(5,v))
// await testg.updateOne({name:"dd1"},{$pull:{"friends":'dv3'}})//删除某个数组元素并取出该元素
// await testg.find({name:"dd1"}).forEach(v=>console.log(v))

// console.log("--------6.1- 高级更新-------")
// await testg.updateOne({ name: "dd2" }, {
//     $push: {
//         friends: {
//             $each: [{ id: "cd1" }, { id: "cd2" }, { id: "cd3" }],
//             $sort: -1,//插入以后对全集进行排序
//             $slice: 4 //对排序的全集 进行截取前4个
//         }
//     }
// })
// await testg.find({}).forEach(v => console.log(v))


//console.log("-----------------------7-----------删除表")
// let 用户表 = db.collection("user")
// let 群表 = db.collection("group")
// await 用户表.drop()
// await 群表.drop()

//console.log("---------------8----------批量插入")
// await 用户表.insertMany([
//     { host: 'hdss7-21', name: 'qysg10001', private_ip: '172.16.7.21', public_ip: '202.100.23.21', region_id: '杭州', status: false },
//     { host: 'hdss7-22', name: 'qysg10002', private_ip: '172.16.7.22', public_ip: '202.100.23.22', region_id: '杭州', status: true },
// ])


// await 群表.insertMany([
//     { 成员集: [{ name: 'qysg10001' }, { name: 'qysg10002' }, { name: 'qysg10003' }], version: '2', port: 80001 },
//     { 成员集: [{ name: 'qysg10001' }, { name: 'qysg10003' }, { name: 'qysg10004' }], version: '1', port: 80002 },
//     { 成员集: [{ name: 'qysg10000' }, { name: 'qysg10002' }, { name: 'qysg10005' }], version: '2', port: 80003 },
// ])/*  */
// console.log("--------9.1--左连接-----------")
// await 群表.aggregate([
//     {
//         $lookup: {
//             from: 'user',
//             localField: 'name',
//             foreignField: 'name',
//             as: 'group_user'
//         }
//     },
//     {
//         $unwind: {
//             path: '$group_user',
//             preserveNullAndEmptyArrays: true,
//         }
//     }

// ]).forEach(v => console.log("记录", v))

// console.log("---------9.2-右连接-----------")
// await 用户表.aggregate([
//     {
//         $lookup: {
//             from: 'group',
//             localField: 'name',
//             foreignField: '成员集.name',
//             as: 'user_group'
//         }
//     },{
//         $unwind: {
//             path: '$user_group',
//             preserveNullAndEmptyArrays: true,
//         }
//     }
// ]).forEach(v => console.log("记录", v))

// console.log("---------9.3-内连接-----------")
// await 群表.aggregate([
//     {
//         $match: { port: 80001 }
//     },
//     {
//         $lookup: {
//             from: 'user',
//             localField: '成员集.name',
//             foreignField: 'name',
//             as: 'group_user'
//         }
//     },
//     {
//         $unwind: {
//             path: '$group_user',
//             preserveNullAndEmptyArrays: false,
//         }
//     },
//     {
//         $match: { "group_user.status": true }
//     },

//      {
//         $project: {
//             _id: 0,"group_user.name":1
//         }
//     }

// ]).forEach(v => console.log("记录", v))
// 错误写法 {$set:{"friends":null}} //friends 不能为null , $push $pop $pull 只能用于arrays
// 尽量用 foreach , toarray无法投影 就是select
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值