当前位置: 首页 > 知识库问答 >
问题:

如何在mongodb聚合中检查子字段是否存在且不为空?

廖永长
2023-03-14

我遇到了一个很烦人的问题,我似乎找不到任何解决我具体情况的办法。在mongo agggregation管道中,我希望添加一个字段,并根据另一个字段子字段的存在情况,为该另一个字段的子字段赋值,如果该另一个字段的子字段不存在,则为1赋值。

以下是我所尝试的:

pipelineStages.push(
{$addFields: 
    {field: 
        {$cond: [
             {$ne: ["$otherField.subField", null]}, 
                    "$otherField.subField", 1]
             }
        }
     }
 );

但是,它只适用于字段存在的情况。在另一种情况下,该新字段根本不添加到管道中。你知道我做错了什么吗?

共有1个答案

鲍国兴
2023-03-14

$IFNULL包装在$cond中就可以解决这个问题,即使有子字段问题。

pipelineStages.push({
    $addFields: {
        newField: {
            $cond: [
                { 
                    "$ifNull": [ 
                        "$otherField.subField", 
                        false 
                    ] 
                },
                "$otherField.subField",
                1
            ]
        }
     }
 );
 类似资料:
  • 问题内容: 我已经创建了一些文档并设法进行了一些简单的查询,但是我无法创建一个查询来查找仅存在字段的文档。 例如,假设这是一个文档: 现在,我需要一个查询,该查询将把所有文档包含文本的地方都带进去。 如果没有文本,则将如下所示: 因此,我想检查中该字段的存在。 我该如何实现? 问题答案: 您可以将运算符与符号结合使用。mongo-shell中的裸查询应如下所示: Java中的测试用例可能如下所示:

  • 本文向大家介绍MongoDB文档中如何检查特定字段是否存在,包括了MongoDB文档中如何检查特定字段是否存在的使用技巧和注意事项,需要的朋友参考一下 使用MongoDB $exists 检查特定字段是否存在。如果文档中不存在该字段,则需要使用find()显示相同的文档。 让我们创建一个包含文档的集合- 在find()方法的帮助下显示集合中的所有文档- 这将产生以下输出- 以下是获取不包含特定字段

  • 我很难相信这个问题还没有在某个地方被问到并回答过,但我找不到任何它的痕迹。

  • 问题内容: 我有以下问题: 我正在将Java驱动程序用于MongoDB 3。 在版本2中,可以执行DB.collectionExists(name)来检查所选数据库中是否存在一个集合。 在版本3中,从DB切换到MongoDatabase,此方法不再存在。 如何查找数据库中是否存在集合?我试图使用listCollectionNames()遍历集合,但这似乎效果很差。 谢谢你的帮助 问题答案: 你是对

  • 本文向大家介绍检查字符串在Java中是否不为空(“”)并且不为null,包括了检查字符串在Java中是否不为空(“”)并且不为null的使用技巧和注意事项,需要的朋友参考一下 假设我们有以下字符串- 现在让我们检查字符串是否为null或不为空。 示例 输出结果

  • 问题内容: 我需要帮助检查数据库中是否存在行。就我而言,该行包含一个电子邮件地址。我得到结果: 这是我当前正在使用的代码: 有没有更好的方法来检查MySQL中是否存在行(在我的情况下,检查MySQL中是否存在电子邮件)? 问题答案: 以下是经过尝试,测试和证明的检查行是否存在的方法。 (其中一些我自己使用,或者过去使用过)。 编辑: 我在使用两次的语法中犯了一个先前的错误。请查阅修订版本。 即: