首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >MongoDB:自动生成的ID为零

MongoDB:自动生成的ID为零
EN

Stack Overflow用户
提问于 2011-01-04 21:45:02
回答 2查看 19.7K关注 0票数 18

我使用的是MongoDB和官方的C#驱动0.9

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

有两个简单的类:

代码语言:javascript
复制
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; }
}

我创建了一个新用户:

代码语言:javascript
复制
var user = new User
{
    Name = "Sam",
    Addresses = (new Address[] { new Address { House = "BIGHOUSE", Street = "BIGSTREET" } })
};

collection.Insert(user.ToBsonDocument());

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

键入后

代码语言:javascript
复制
db.users.find()

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

代码语言:javascript
复制
{ "_id" : ObjectId("4e572f2a3a6c471d3868b81d"), "Name" : "Sam",  "Addresses" : [
        {
                "_id" : ObjectId("000000000000000000000000"),
                "Street" : "BIGSTREET",
                "House" : "BIGHOUSE"
        }
] }

为什么address的对象id是0?

不过,使用地址进行查询是可行的:

代码语言:javascript
复制
collection.FindOne(Query.EQ("Addresses.Street", streetName));

它返回用户"Sam“。

EN

回答 2

Stack Overflow用户

发布于 2011-01-04 22:56:25

与其说它是一个bug,不如说它是一个未满足期望的案例。只有顶级_id才会自动分配值。任何嵌入的_ids都应该由客户端代码(使用ObjectId.GenerateNewId)赋值。也有可能在Address类中甚至不需要ObjectId (它的用途是什么?)。

票数 26
EN

Stack Overflow用户

发布于 2017-03-25 18:13:05

获取用户类型的集合:

代码语言:javascript
复制
var collection = db.GetCollection<User>("users");

按如下方式初始化字段_id:

代码语言:javascript
复制
var user = new User
{
   _id = ObjectId.Empty,
   Name = "Sam",
   Addresses = (new Address[] { new Address { House = "BIGHOUSE", Street = "BIGSTREET" } })
};

然后插入对象:

代码语言:javascript
复制
collection.InsertOne(user);

_id字段将自动生成。

在此link中,您将找到其他方法来自定义自动生成的ID。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4594270

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档