文档的格式是
{
from: "a#b",
to: ["a#a","a#c","b#b","abc#b"]
}
现在我想查出所有 from 字段#后面的字符串也在 to 字段#后面中出现 的所有文档
就比如
db.col.find({$expr:{$in:["$from", "$to"]}})
但是不是整个字段去 in 匹配,而是只取#后面的字符串进行比较
1
stabc 2021-03-29 15:51:35 +08:00
$in 后面可以跟 function 的,所以前面可以自定义 function 里加 RegExp.
不过不建议这样设计数据库,既然#后面的字符串需要比对,为什么不独立出来呢,json 做这个很方便啊 |
2
catinsides 2021-03-29 18:41:45 +08:00
用聚合 aggregation,$split,$project,$match
|
3
haha88 2021-03-31 15:32:28 +08:00
先截取,在匹配? db.test2.aggregate([
{$project: { from:{$substr:['$from',{$indexOfCP:['$from','#']},{$strLenCP:'$from'}]},to:'$to' }}, { $match: { $expr: { $anyElementTrue: { $map: { input: "$to", as: "item", in: { $ne: [-1, { $indexOfBytes: ["$$item", "$from"] }] } } } } } } ]); |