如何设置字符串字段不等于空字符串MongoDB聚合管道

Posted

技术标签:

【中文标题】如何设置字符串字段不等于空字符串MongoDB聚合管道【英文标题】:How to set that a string field is not equal to empty string MongoDB aggregation pipeline 【发布时间】:2021-12-12 23:19:43 【问题描述】:

如何设置某个字段不能为空字符串。 当我将friendsArray.lastMessage 字符串字段设置为空时,它会给出我想要的结果,即:

matches = db.user_relations.aggregate(
        [
            "$match": "userId": id,
            "$unwind": "path": "$friendsArray",
            "$sort": "friendsArray.lastTimestamp": -1,
            "$match": "friendsArray.lastMessage": "",
            "$limit": 6,
            "$replaceRoot": "newRoot": "$friendsArray",
            
                "$lookup": 
                    "from": "users",
                    "localField": "userId",
                    "foreignField": "_id",
                    "as": "joined__"
                
            ,
            "$unwind": "path": "$joined__",
            "$replaceRoot": "newRoot": "$mergeObjects": ["$joined__","$$ROOT"],
            "$project": "joined__": 0,
            "$match": "$expr": "$eq": ["$isProfileBlocked", False],
            
                '$addFields': 'userId': '$toString': '$userId'
            ,
            "$unset": valuesToUnset
        ]
    )

但是当我改变这个时:"$match": "friendsArray.lastMessage": "", 对此:"$match": "friendsArray.lastMessage": "$not" : ["$eq": ""]

它给了我一些奇怪的结果?它混合了数据,我真的不知道它在做什么?

我试过把$ne$nin 参数和搜索整个互联网,但我找不到满意的答案?

有人知道我做错了什么吗?

【问题讨论】:

可能给出样本数据和预期输出,找到导致问题的阶段,我们可以测试一下 【参考方案1】:

您没有在 $eq 运算符上使用正确的 sintax。检查docs。

请注意,find 中的 $eq 与聚合中的 $eq 不同。

正确的做法是在这一行中如何使用它:

"$match": "$expr": "$eq": ["$isProfileBlocked", False],

我还做了一个你需要的例子here。

【讨论】:

以上是关于如何设置字符串字段不等于空字符串MongoDB聚合管道的主要内容,如果未能解决你的问题,请参考以下文章

MongoDB 聚合 $lookup 到具有管道语法和 _id 作为字符串的父数组字段

如何判断 Tasker 变量是未设置、空字符串还是非空字符串

oracle 不等于1怎么查?

mongodb,

将空字符串写入 MongoDB 输出 - Pentaho

SQL语句如何查询ACCESS数据库中某一字符串字段长度等于某个值的所有记录?