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

MongoDB 中有没有什么办法能把 ObjectId 转为 Long?

  •  
  •   ohyeahhh · 161 天前 · 8152 次点击
    这是一个创建于 161 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近在搞一个推荐的东西,但是那套推荐算法中要的数据是 userId,itemId,rating 这种,其中 userId 和 itemId 好像只能是 Long 型,但我们的库里存的都是 ObjectId,想问下有没有什么方法能转吗?

    13 回复  |  直到 2019-11-23 09:53:29 +08:00
        1
    Aidenboss   161 天前
    Number.parseInt(objectId, 16)
        2
    sujin190   161 天前
    都是二进制看你怎么解码了,按 ObjectId 解码就是 ObjectId 按 Long 解码就是 Long,但是你要怎么把 12 字节的 ObjectId 放到一个 8 字节的 Long 上去
        3
    tikazyq   161 天前
    getTimestamp
        4
    ChristopherWu   161 天前
    @tikazyq getTimestamp 是不对的。ObjectId 并不等价于其中的 Timestamp
        5
    ohyeahhh   161 天前
    @Aidenboss #1 如果我要再转回来呢?
        6
    chendy   161 天前
    ObjectId 12 个字节
    Long 8 个字节
    感觉很难转
        7
    ohyeahhh   161 天前
    @chendy #6 如果是 String 呢 因为 ObjectId 是可以转成 String 的
        8
    chendy   161 天前
    @ohyeahhh String 就啥问题没有了
        9
    oneisall8955   161 天前 via Android
    userId 这种字段可以用 ObjectId 类型,你要短一点好认作为对人类友好的表示,用一个唯一 orderNo 字段然后自己定义规则即可。
    另外,非要 long 类型作为 Id 字段的话,可以参考使用雪花算法,实现全数字,但是雪花算法算出来的 ID 跟 ObjectId 是不兼容的,也就是说,有一个雪花算法算出来的 long 型 id 为 xxx,那么 new ObjectId(xxx)是会被底层检查不符合 ObjectId 的规则导致抛出异常。
    雪花算法的 ID 也很长,要短一点的话,参考美团团队的做法,搜索一下看下怎么实现吧,但是这个我没应用过。
    个人愚见
        10
    lihongjie0209   161 天前
    不可能, 超过了 long 的长度了
        11
    metrxqin   160 天前 via Android
    ObjwctId 不可能用于存储业务参数。
        12
    ericgui   160 天前
    为什么不能存成为 string
        13
    q540374501   20 天前
    node 转成 long 还要引入 biginteger 包。。不然放不下,计算不了。
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2554 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 25ms · UTC 11:43 · PVG 19:43 · LAX 03:43 · JFK 06:43
    ♥ Do have faith in what you're doing.