mongo聚合查询高阶

每次用pymongo进行聚合查询的时候,有一些命令总会忘记,记录一下
情况1:keywords字段存在三种情况,不存在,存在为空列表,不为空的列表。可以根据下面命令查询不为空的列表。

table_post.find({'keywords':{'$exists':True},'keywords.0':{'$exists' : True }})'

情况2:根据查询条件将所有字段放在同一个list中,若字段也为list,需要两次$unwind.

k = table_post.aggregate([
#查询条件
    {'$match':{'createdAt':{'$gt':s,'$lt':e},'keywords':{'$exists':True}}},
    {"$group": {
       "_id": '$domain',
       "tcount": {"$sum": 1 },
       "keywords": {"$push":"$keywords" }
    }},
    {"$unwind":"$ttags" },
    {"$unwind":"$ttags" },
    {"$group": {
       "_id":"$_id",
        "tcount": {"$first":"$tcount" },
        "tags": {"$addToSet":"$ttags" }
     }}
    # {"$project": {
    #    "count":"$tcount",
    #    "tags":"$ttags"

])
您好!对于MongoTemplate的聚合查询,您可以使用Aggregation类来构建聚合查询管道。以下是一个简单的示例: ```java import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.data.mongodb.core.aggregation.Aggregation; import org.springframework.data.mongodb.core.aggregation.TypedAggregation; import org.springframework.data.mongodb.core.aggregation.AggregationResults; import static org.springframework.data.mongodb.core.aggregation.Aggregation.*; public class AggregationExample { private MongoTemplate mongoTemplate; public AggregationExample(MongoTemplate mongoTemplate) { this.mongoTemplate = mongoTemplate; } public void performAggregation() { TypedAggregation aggregation = newAggregation( // 添加聚合操作 match(Criteria.where("fieldName").is("value")), group("groupField").count().as("count"), sort(Sort.Direction.DESC, "count") ); AggregationResults<AggregateResultClass> results = mongoTemplate.aggregate(aggregation, "collectionName", AggregateResultClass.class); List<AggregateResultClass> resultList = results.getMappedResults(); // 处理结果 for (AggregateResultClass result : resultList) { // 进行相应的操作 // result.getGroupField(); // result.getCount(); } } } // 聚合结果的POJO类 class AggregateResultClass { private String groupField; private int count; // 省略构造函数、getter和setter } ``` 请根据您的具体需求修改上述示例中的字段和条件。希望对您有所帮助!如果您有任何其他问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值