MongoVue和Guid是什么?

3
我想使用mongoVue工具插入一个Guid,怎么做呢?
为了解释上下文,我过去通常会复制我的集合json(通过文本视图选项卡)并将其粘贴到我的txt文件中,而不是使用mongodump。但是当我创建一个新的集合并将先前复制的json粘贴到其中时,我的guid二进制类型现在出现为“对象ID”,那么问题就是:我无法将Object ID映射到我的Guid字段在C#代码中。
这就是为什么我想知道是否可以在MongoVue中插入一个guid。
谢谢大家。 约翰
3个回答

2

您可以使用以下符号在MongoVUE中输入GUID:

{
guid_field: new Guid("3bed978a-dc87-4fa4-8a1a-f0679387fa7e")
}

要插入新的 GUID(Guid.NewGuid()),您可以输入:

{
guid_field: new Guid()
}

所有GUID都会转换为二进制类型3的值。


我右键点击并按下插入键,使用了类型为json的格式,并将其放入文本区域中,但是我收到了错误提示:“数据输入错误-请验证您的值”。详细信息显示: 数据输入错误-请验证您的值 JSON读取器期望找到一个类型名称,但却找到了“Guid”。 类型:System.IO.FileFormatException有什么想法吗? - Dan Csharpster
请注意,从MongoVUE 1.4.2及更高版本开始,语法已更改:Guid()已被弃用。请改用“CSGUID('...')”来解析.NET GUID。来自changelog - Nate Barbettini

0

谢谢您的回答。他们网站上关于对象ID的讨论并没有太大帮助。我猜想可能没有办法使用GUID插入文档。 - John

0

当我插入以下类的实例时:

public class C {
    public Guid Id;
    public int X;
}

在 MongoVUE 文本视图中,它看起来像这样:

/* 0 */
{
  "_id": {
    "$binary": "q4TTjt8k4UyaJI6FwuZ1EQ==",
    "$type": "03"
  },
  "X": 1
}

在MongoDB中,GUID被表示为子类型3的BSON二进制值,而不是ObjectId。

要在MongoVUE中插入GUID,您需要创建一个子类型为3的BSON二进制值。难点在于找出要使用的Base64值。

此外,在MongoDB中通常存在UUID存储问题。目前支持UUID的三个驱动程序(C#,Java和Python)过去曾使用不同的字节顺序来二进制表示UUID,这使得处理变得非常困难。

将来版本的驱动程序将使用新的二进制子类型4来处理UUID,并且将统一使用官方UUID网络字节顺序(16个字节按照UUID的字符串表示形式中的顺序存储)。

当前版本的C#驱动程序(1.1版本刚刚发布)具有一些实验性支持,可用于处理不同的GUID表示形式(请参见GuidRepresentation枚举及其使用位置)。


1
我在MongoVUE上进行了更多的实验,并且成功地复制了该问题。当插入一个具有二进制子类型3值的文档时,MongoVUE会用ObjectId替换_id。我已经给MongoVUE的作者发送了电子邮件以了解情况。如果可以选择,最好使用ObjectId而不是Guid来采取最小阻力的路径。然而,我们确实打算完全支持Guids。 - Robert Stam

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接