无法使用 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'] } }
环境: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'] } }