c# - MongoDB:自动生成的 ID 为零

标签 c# mongodb embedding

我正在使用 MongoDB 和官方 C# 驱动程序 0.9

我只是在检查嵌入简单文档的工作原理。

有 2 个简单的类(class):

public class User
{
    public ObjectId _id { get; set; }
    public string Name { get; set; }
    public IEnumerable<Address> Addresses { get;set; }
}

public class Address
{
    public ObjectId _id { get; set; }
    public string Street { get; set; }
    public string House { get; set; }
}

我创建了一个新用户:

var user = new User
{
    Name = "Sam",
    Addresses = (new Address[] { new Address { House = "BIGHOUSE", Street = "BIGSTREET" } })
};

collection.Insert(user.ToBsonDocument());

用户已成功保存,他的地址也已成功保存。

输入后

db.users.find()

在 MongoDB shell 中,我得到了以下结果:

{ "_id" : ObjectId("4e572f2a3a6c471d3868b81d"), "Name" : "Sam",  "Addresses" : [
        {
                "_id" : ObjectId("000000000000000000000000"),
                "Street" : "BIGSTREET",
                "House" : "BIGHOUSE"
        }
] }

为什么地址的对象 id 为 0?

使用地址进行查询虽然有效:

collection.FindOne(Query.EQ("Addresses.Street", streetName));

它返回用户“Sam”。

最佳答案

与其说是错误,不如说是未达到预期。只有顶级 _id 会自动分配一个值。任何嵌入的 _id 都应由客户端代码分配值(使用 ObjectId.GenerateNewId)。也有可能您甚至不需要 Address 类中的 ObjectId(它的目的是什么?)。

关于c# - MongoDB:自动生成的 ID 为零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4594270/

相关文章:

python - 在 Keras 中向嵌入层添加偏差

c# - 是否可以包装整数并像整数一样调用它?

c# - 处理我需要从我的方法返回的数据表对象

javascript - Meteor-React 使用提交模式删除帖子(帖子未定义)

pdf - 如何强制在浏览器中打开文件而不是下载 (PDF)?

java - 在 Java 中嵌入 Groovy(绑定(bind))

c# - 在复杂/单窗口 WPF 应用程序中使用 Thread 的最佳方式

C# XML : System. InvalidOperationException

javascript - 如何格式化作为对象数组中值的日期

mongodb - 并行运行 MongoDB 聚合