V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐工具
RoboMongo
推荐书目
50 Tips and Tricks for MongoDB Developers
Related Blogs
Snail in a Turtleneck
zxCoder
V2EX  ›  MongoDB

请教一个 mongodb 查询的写法

  •  
  •   zxCoder · 2021-03-29 15:32:33 +08:00 · 1687 次点击
    这是一个创建于 1317 天前的主题,其中的信息可能已经有所发展或是发生改变。

    文档的格式是

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

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

    就比如

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

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

    3 条回复    2021-03-31 15:32:28 +08:00
    stabc
        1
    stabc  
       2021-03-29 15:51:35 +08:00
    $in 后面可以跟 function 的,所以前面可以自定义 function 里加 RegExp.

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

    ]);
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3360 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 11:01 · PVG 19:01 · LAX 03:01 · JFK 06:01
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.