我正在使用 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/