MongoDB常用操作总结

来源:互联网 发布:长得漂亮一直单身知乎 编辑:程序博客网 时间:2024/06/01 21:24

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}},    )
0 0