MongoDB复杂查询,如何查询一个list中type为某个固定值,并且长度大于3的结果

老男孩ooxx 发布于 2019/12/10 09:59
阅读 187
收藏 1

问一个查询

查询contentList.type包含4的数据,并且contentList.type为4的数据条数要大于3条的所有结果

刚刚接触mongoDB有没有大佬指导一下

{
    "_id" : ObjectId("599143b13a19ac120845e5ef"),
    "contentList" : [ 
        {
            "text" : "I was exci",
            "type" : 1,
            "order" : 1,
            "showUrl" : null,
            "resUrl" : null,
            "seconds" : 0.0,
            "isOriginal" : true,
            "imgWidth" : 0,
            "imgHeight" : 0
        }, 
        {
            "text" : "【马布里助阵​",
            "type" : 1,
            "order" : 2,
            "showUrl" : null,
            "resUrl" : null,
            "seconds" : 0.0,
            "isOriginal" : true,
            "imgWidth" : 0,
            "imgHeight" : 0
        }
    ],
    "remindList" : null,
    "originalPublishId" : ObjectId("599143b13a19ac120845e5ef"),
    "isOnlyFriend" : false,
    "referenceId" : null,
    "authorId" : ObjectId("59913ebd994443076457761e"),
    "authorName" : "StephonMarbury",
    "authorProfileImg" : "StephonMarburylogo.jpg",
    "from" : 5,
    "isDeleted" : false,
    "time" : ISODate("2019-12-09T08:46:36.000Z"),
    "date" : ISODate("2017-08-13T16:00:00.000Z")
}
 
加载中
0
MyronLee
MyronLee

// Requires official MongoShell 3.6+
use test;
db.getCollection("dataset").aggregate(
    [
        {"$match" : {"contentList.type" : 4}}, 
        { 
            "$addFields" : {
                "typecount" : {
                    "$reduce" : {
                        "input" : "$contentList", 
                        "initialValue" : 0, 
                        "in" : {
                            "$add" : [
                                "$$value", 
                                {
                                    "$cond" : {
                                        "if" : {"$eq" : ["$$this.type", 4]}, 
                                        "then" : 1, 
                                        "else" : 0
                                    }
                                }
                            ]
                        }
                    }
                }
            }
        }, 
        {"$match" : {"typecount" : {"$gt" : 3}}}, 
        {"$project" : {"typecount" : 0}}
    ], 
    { 
        "allowDiskUse" : false
    }
);
 

f
freezingsky
$elemMatch
返回顶部
顶部