MongoDB常用操作总结

MongoDB常用操作总结

字段为map对象

map对象中的key的访问与嵌套字段的访问类似,用“.”符号;

db.request.update(
{"_id":ObjectId("57838820445de820d091d3ee")},
{"$set":{"auditorsubmits.zl":true}, "$addToSet":{records:{stateid:3}, holders:"z"}}
)  
//records,holders都为数组类型字段

aggregate操作结果为数组

输入如下命令:

db.process.aggregate(
{"$match":{"admins.users":"zhangle"}},
{$project:{"perms":"$admins.perms", _id:0}}
)

返回结果如下:

{
    "perms" : [
        {
            "roleid" : 18,
            "role" : "OP",
            "groupid" : 2,
            "group" : "op-rd"
        }
    ]
}

在golang中实现用如下代码:

pipeline := []bson.M{
        {"$match": bson.M{"_id": bson.ObjectIdHex(processId)}},
        {"$project": bson.M{"perms": "$admins.perms", "_id": 0}},
    }
    res := bson.M{}
    err = c.Pipe(pipeline).One(&res)

    //取出perms数组,并做类型([]interface{})转换
    ps, _ := res["perms"].([]interface{})

    for _, v := range ps {
        //每个数组元素都为bson.M对象,转换类型
        p, _ := v.(bson.M)

        //类型转换,第二个返回值表明是否成功转换。
        //在此忽略,只是防止转换失败时,进程panic; 这样即使转换失败,转换的结果(如roleId)也可以正常获取该类型的“零值”。
        roleId, _ := p["roleid"].(int)
        role, _ := p["role"].(string)
        groupId, _ := p["groupid"].(int)
        group, _ := p["group"].(string)
}

mongdo自增”_id”

该对象为ObjectId类型,在shell中查询时需要带上类型转换:

db.process.find({_id:ObjectId("578758d261656e4ea2373bce")}, {name:1, _id:0})

结果如下:

{ "name" : "op财务审批" }

在golang程序下则如下表达:

c.FindId(bson.ObjectIdHex(id)).One(data)

该id转换成string:

r := bson.M{}
profile.Id = r["_id"].(bson.ObjectId).Hex()

向数组类型字段添加一次性添加多个元素

//holders为数组类型,hs也为数组
err = c.UpdateId(
        bson.ObjectIdHex(requestId),
        bson.M{"$addToSet": bson.M{"holders": bson.M{"$each": hs}}})

同时更新多个字段(数组及非数组类型)

    err = c.UpdateId(
        bson.ObjectIdHex(requestId),
        bson.M{
            "$set": bson.M{//以下为非数组类型字段
                "curstateid":     nextStateId,
                "curstatetype":   newStateType,
                "curstatename":   newStateName,
                "curgrouptype":   newGroupType,
                "auditorsubmits": newAuditors,
            },
            //向数组中添加单个值
            "$addToSet": bson.M{
                "records": *record,
                "holders": auditor,
            },
        },
    )

删除数组中的元素

//admins为数组类型字段,users为数组类型
err = c.UpdateId(
        bson.ObjectIdHex(processId),
        bson.M{"$pullAll": bson.M{"admins": users}},
    )
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值