无法使用 MongoDB 中的另一个子节点值通过 $match 节点进行过滤

cannot filter with $match a node by another subnodes value in MongoDB

环境:Mongo 4.2.2。从 Compass 1.20.5

调用

我将(单个文档的)数组的 2 个元素 $unwind 放入 2 个单个文档中:

 {
    { id: 1 },
    { termTrg: { lang: "ara"} },
    { sublangTrans: { lang: "apj"} }
 }

 {
    { id: 1 },
    { termTrg: { lang: "ara"} },
    { sublangTrans: { lang: "ara"} }
 }

在我再次$group将它们按id 1合并到一个文档之前,我希望用$match文档过滤其中lang属性相同的文档。静态提供字符串 ara,按预期删除第二个文档。

$match { 'sublangTrans.lang' : { $ne: 'ara' } }

如果我尝试用节点的值 termTrg.lang 替换 ara,它不会删除任何文档。

$match { 'sublangTrans.lang' : { $ne: 'termTrg.lang' } }

为什么 termTrg.lang 的值没有解析?正确的语法是什么?是否有其他过滤文档的方法?

下面会匹配不等于termTrg.lang

的字符串
$match { 'sublangTrans.lang' : { $ne: 'termTrg.lang' } }

要获得 termTrg.lang 的解析值,您必须使用 $expr https://docs.mongodb.com/manual/reference/operator/query/expr/

$match: { $expr: { $ne: ['$sublangTrans.lang', '$termTrg.lang'] } }

如果您想匹配具有相同 lang 属性的项目

$match: { $expr: { $eq: ['$sublangTrans.lang', '$termTrg.lang'] } }