2

当我插入 Mongo 时,我不想定义 _id,但我确实想读取 _id。使用对象时,例如

public class MyClass
    {
        public Object _id { get; set;}
        public String propery1 { get; set; }
    }

如果我做类似的事情,我正在写 null _id

this.myobj.property1 = "Useless info";    
SafeModeResult result = this.uploads.Insert(uploadedfilecanonical, SafeMode.True);

我是否需要为查询绑定和插入绑定创建单独的类类型,其中插入没有定义 _id 属性但可查询的呢?

4

2 回答 2

4

我不是很理解你的问题,所以我会在这里尽力而为。如果您进行插入,如果 _id 为空,它将保持为空。如果您使用保存,它会为您创建一个标识符(如果不存在)。但是,您使用 Object 作为您的 id,这很奇怪。我们建议您使用 ObjectId、整数、Guid 或其他内容。

此外,您可以为 .NET 类使用名为“Id”的属性,而不是非常规的 _id。或者,您可以使用属性来表示 id,或者您可以创建约定来应用通用模式。我强烈建议阅读教程以获取更多信息。

于 2012-08-28T15:32:13.623 回答
0

只有ObjectIdandGuid在这里作为一种 Id 属性工作。您可以不带下划线(且不带[BsonId]属性)命名属性。

ObjectId对于 mongo 来说是很自然的,服务器会创建它并用它来响应,这是最快的方式,AFAIU。 Guid对于 .NET 来说很自然,但客户端的 Mongo 驱动程序将生成此 ID 并将其编码为 mongo。最后 2 行是 .Net Guid 存储在 mongo 中的方式。前几行是自然的 mongo ObjectId在此处输入图像描述

只要您只需要在某处提供参考,ObjectId结构就应该适合您。

但是,如果您对 Id 进行序列化,您可能会看到令人不快的结果。可以使用属性更改 BsonRepresentation 并使用字符串,例如:

    public class SimpleTask
    {
        [BsonRepresentation(BsonType.ObjectId)]
        public string Id { get; set; }
        public string Subject { get; set; }
    }
于 2018-02-04T19:56:39.137 回答