0

环境:Mongo 4.2.2。从 Compass 1.20.5 调用

$unwind将数组(单个文档)的 2 个元素放入 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' } }

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

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

为什么termTrg.lang's 的值没有解决?什么是正确的语法?是否有另一种过滤文档的方法?

4

1 回答 1

2

以下将匹配不等于的字符串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'] } }
于 2020-04-27T22:26:20.663 回答