【问题标题】:Using Mongo / BSON ObjectId with Parse Server将 Mongo / BSON ObjectId 与 Parse 服务器一起使用
【发布时间】:2017-10-08 01:27:21
【问题描述】:

我目前有一个项目正在从 Parse Server 迁移出来,但需要保持向后兼容性。

由于 Parse Server 生成它自己的对象 ID,而不是使用 Mongo,我想知道:

  • Parse Server 如何生成它的 objectIds?

  • 当 MongoDB 本身具有出色的 objectId 生成功能时,为什么会这样做?

  • parse 能否处理具有非 Parse 生成的 ID 的对象?

一个例子:

_id: "LvIzxv5spL"                // created by Parse Server
_id: "507f1f77bcf86cd799439011"  // BSON.ObjectId created by MongoDB directly

感谢您的阅读,任何帮助将不胜感激! 干杯:)

为简洁而编辑

【问题讨论】:

  • 注:我参与的另一个项目确实手动创建了这些 ID,但他们确保格式与 Parses 匹配(尽管不是生成方法)。
  • 我不能告诉你 ids 是如何生成的,但我可以告诉你:你不能添加或修改现有对象的对象 ID,但你可以将数据迁移到 parse-服务器,并且必须事先为其分配一个 objectId。我使用了与 Parse-Server 相同的位数和可能的位数,并且与自定义 ID 没有冲突。
  • 您找到解决方案了吗?我有同样的问题

标签: mongodb parse-platform parse-server bson objectid


【解决方案1】:

我发现 Parse Server 如何在创建 here 时生成新 ID。 上面的注释文档指出,正在调用下面的函数来为 Parse Server 生成一个新的 id。

我仍然不知道为什么它必须以自己的方式创建一个 id 而不是使用 Mongo 的原生 ID。它应该有助于轻松删除 Parse Server 依赖。

请在下面的 c# 中找到我用来生成新 id 的代码,例如解析服务器。我没有对它进行所有方面的测试,但我认为它会通过其他人的大部分测试用例,如果不是全部的话。

    /// <summary>
    /// Randoms the string.
    /// </summary>
    /// <param name="length">The length.</param>
    /// <returns></returns>
    public static string RandomString(int length)
    {
        string chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" + "abcdefghijklmnopqrstuvwxyz" + "0123456789";
        StringBuilder res = new();
        using (RNGCryptoServiceProvider rng = new())
        {
            byte[] uintBuffer = new byte[sizeof(uint)];

            while (length-- > 0)
            {
                rng.GetBytes(uintBuffer);
                uint num = BitConverter.ToUInt32(uintBuffer, 0);
                res.Append(chars[(int)(num % (uint)chars.Length)]);
            }
        }

        return res.ToString();
    }

    /// <summary>
    /// Gets the new object identifier.
    /// </summary>
    /// <param name="size">The size.</param>
    /// <returns></returns>
    public static string GetNewObjectId(int size = 10)
    {
        return RandomString(size);
    }

我希望此示例代码有助于以您的首选语言重新创建逻辑。

【讨论】:

    猜你喜欢
    • 2012-03-12
    • 1970-01-01
    • 2016-06-17
    • 2016-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多