如何设置字符串字段不等于空字符串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 作为字符串的父数组字段