gpt4 book ai didi

mongodb - 使用 `$expr` 中的路径检查字段的存在

转载 作者:行者123 更新时间:2023-12-04 07:58:05 31 4
gpt4 key购买 nike

在表达式 ($expr) 中,并且仅在表达式中,我想检查是否存在具有导航路径 的字段。

db.haystack.aggregate(
[
{
'$match': {
'$expr':
{ 'a.b.c': { '$ne': null } },
},
},

],
);

但我收到错误消息 FieldPath field names may not contain '.'

如何检查 $expr 中字段的存在?如果路径的某些部分不存在,我想拒绝该文档。

{ a: 1 } // False
{ a: { b: 1 } } // False
{ a: { b: { c: 1 } } // True

最佳答案

您的代码中有两个问题,首先是因为您需要使用 $expr让我们了解什么是 $expr 的 可能的输入:

The arguments can be any valid aggregation expression. For more information, see Expressions.

所以 $expr 收到一个 "aggregation expression"这是:

Expressions can include field paths, literals, system variables, expression objects, and expression operators. Expressions can be nested.

所以 {"a.b.c":{"$ne":null}} 的当前输入不是这些,在这种情况下你想使用 $ne aggregation form这是:

{ $ne: [ ... args ... ] }

第二期来了,期待this查询同时匹配空值和缺失字段的 null 的特殊查询行为。然而,这对于聚合框架不存在,只存在于查询语言中。

解决这个问题的方法有很多,但这里有一个使用 $type 的解决方案

db.collection.aggregate([
{
"$match": {
"$expr": {
$ne: [
{
$type: "$a.b.c"
},
"missing"
]
}
}
},
])

Mongo Playground

关于mongodb - 使用 `$expr` 中的路径检查字段的存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66597844/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com