mongdb多条件查询

$match 用于对数据进行筛选

{"$match":{"字段":"条件"}},可以使用任何常用查询操作符$gt,$lt,$in,$or等
db.查询数据库名称.aggregate([{"$match":{// 过滤数据的条件}}])
{
   $match: {
       is_delete:false,
      $or:[{字段:'条件'}]
   }
 }

$addFields 添加字段或者覆盖字段

{ $addFields: { "_id": { "$toString": "$_id" }}}  // 用字符串_id覆盖ObjectId的_id

$lookup 数据连表查询

 {
       $lookup: {
             from: '关联表的表名',
             localField: '查询表中与关联表相关的字段',
             foreignField: '关联表中与查询表相关的字段',
             as: '关联表要加入到查询表中的字段名'
       }
}

$project 选择要显示的字段,并且过滤关联表中的数据

{"$project":{"要保留的字段名":1,"要去掉的字段名":0,"新增的字段名":"表达式"}}
_id字段默认显示,要去掉就用0;其他字段不显示直接不写就好,用0弃掉会报错。
数字表达式
{"$add":[expr1,expr2,...,exprN]} #相加
{"$subtract":[expr1,expr2]} #第一个减第二个
{"$multiply":[expr1,expr2,...,exprN]} #相乘
{"$divide":[expr1,expr2]} #第一个表达式除以第二个表达式的商作为结果
{"$mod":[expr1,expr2]} #第一个表达式除以第二个表达式得到的余数作为结果
表达式之日期表达式:
$year,$month,$week,$dayOfMonth,$dayOfWeek,$dayOfYear,$hour,$minute,$second
db.emp.aggregate([
    {"$project":{"要显示的字段":1,"date":{"$year":"$日期字段"}}}
])
字符串表达式
{"$substr":[字符串/$值为字符串的字段名,起始位置,截取几个字节]}
{"$concat":[expr1,expr2,...,exprN]} #指定的表达式或字符串连接在一起返回,只支持字符串拼接
{"$toLower":expr}
{"$toUpper":expr}

$group 用于分组

db.emp.aggregate([
    {"$group":{"_id":"$分组字段",'显示名称':{"$avg":"$字段名称"}}}
])
数组操作符
{"$addToSet":expr}:去重
{"$push":expr}:重复
{"$first":expr} - 根据资源文档的排序获取第一个文档数据
{"$group":{"_id":"$分组字段","显示字段":{"$push":"$需要显示内容的字段"}}}

$sort ,limit,skip 排序,分页查询

$sort: 1升序,-1降序
$limit:一页要显示的数据,pageSize
$skip:要从第几个开始,(pagenum - 1) *pageSize

$sample 随机查询

db.skill.aggregate([ {"$sample": {size: 5} }])  // 随机查询5条

$unwind 将数组元素拆分为独立字段

{ "_id" : ObjectId(""),"array" : [  "one",  "two",  "three" ] }

db.test.aggregate({$project:{array:1}},{$unwind:"$array"}) 
{ "result" : [ { "_id" : ObjectId(""), "tags" : "one"  },  {  "_id" : ObjectId(""), "tags" : "two" }, {  "_id" : ObjectId(""),"tags" : "three" } ], "ok" : 1 }

$filter 过滤要返回的数组子集

{$lookup: {from: 'table', localField: '_id',foreignField: 't_id', as: 'List'} },
{$project: {name: 1, List: {$filter: {input: "$List", as: "item",cond:{$eq: ["$$item.name",""]} } }}}
// cond:{} 里面要过滤数组类型时,不能一层一层直接打点
// cond:{{$eq: [ "$$item.array.name", '']}} 过滤不了

混合使用:

db.数据库名.aggregate([
	{ $addFields: { "_id": { "$toString": "$_id" }}},
    {
    	$lookup: {
	         from: '关联表的表名',
             localField: '查询表中与关联表相关的字段',
             foreignField: '关联表中与查询表相关的字段',
             as: '关联表要加入到查询表中的字段名'
         }
 	 },
     {
		$match: {
			_id:''",is_delete:false,
            $or:[
            	{查询表的字段:'要过滤的条件'},
            	{'关联表要加入到查询表中的字段名.关联表字段':''}
             ]
         }
	},
	{
		$project: {
			要显示的字段:1,
            关联表要加入到查询表中的字段名:{
				$filter: {
					input: "$关联表要加入到查询表中的字段名",
					as: "item",
					cond: {$or: [{$eq: ["$$item.name:"]}]}
                 }
			}
		}
	}
])

mongodb批量修改字段中的某个字符

db.getCollection('flow_node_copy_update').find({
    'content.reply_list.content_list.content':{'$ne':null}, 
    'content.reply_list.content_list.content':{$regex:/~/}}).
    forEach( 
        function(item) {
            var tmp = item.content.reply_list
            if (tmp.length != 0) {
                tmp.forEach(
                    function(replyList) {
                        var reply = replyList.content_list
                        if (reply.length != 0) {
                            reply.forEach(
                                function(contentList) {
                                    var content = contentList.content
                                    if (content != null) {
                                        contentList.content = content.replace(/~/g,"!");
                                        print(contentList.content)
                                    }
                                }
                            )
                        }
                    }
                )
            }
            print(item.content.reply_list[0].content_list[0].content)
            db.getCollection('flow_node_copy_update').save(item);
        } 
);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值