请教一个 mongodb 查询的写法

2021-03-29 15:32:33 +08:00
 zxCoder

文档的格式是

{
	from: "a#b",
    to: ["a#a","a#c","b#b","abc#b"]
}

现在我想查出所有 from 字段#后面的字符串也在 to 字段#后面中出现 的所有文档

就比如

db.col.find({$expr:{$in:["$from", "$to"]}})

但是不是整个字段去 in 匹配,而是只取#后面的字符串进行比较

1563 次点击
所在节点    MongoDB
3 条回复
stabc
2021-03-29 15:51:35 +08:00
$in 后面可以跟 function 的,所以前面可以自定义 function 里加 RegExp.

不过不建议这样设计数据库,既然#后面的字符串需要比对,为什么不独立出来呢,json 做这个很方便啊
catinsides
2021-03-29 18:41:45 +08:00
用聚合 aggregation,$split,$project,$match
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"] }] } } } } } }

]);

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/766177

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX