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

我只是在判断嵌入简单文档的工作原理.

有两个简单的课程:

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".

推荐答案

使用BsonId属性:

public class Address
{
    [BsonId]
    public string _id { get; set; }
    public string Street { get; set; }
    public string House { get; set; }
}

Identifying the Id field or property

确定的字段或属性

public class MyClass {
    [BsonId]
    public string SomeProperty { get; set; }
}

Driver Tutorial

Edit

它实际上不起作用.我稍后再查原因.

    [Test]
   public void Test()
    {
        var collection = Read.Database.GetCollection("test");

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

        collection.Insert(user.ToBsonDocument());
    }

Mongodb相关问答推荐

Spring Data MongoDB中的@ Transactions(+测试容器)

通过mongoDB中的查找从管道中删除被阻止的用户

在一个视图中连接两个集合MongoDB;展开有什么作用?

Go mongo-驱动程序测试,FindOne未根据给定的筛选器返回正确结果

更新值导致错误 Golang MongoDB

Mongodb Timeseries / Golang - ['timestamp' 必须存在并包含有效的 BSON UTC 日期时间值]

DB.collection('comments').find() 不工作

在mongodb中,如何使用聚合来获取字段之间的对应关系

如何在 MongoDB 中存储时间?作为字符串?给出任意年/月/日?

哪个库最适合用于带有 Scala 的 MongoDB?

Mongoose 与 mongodb 如何返回刚刚保存的对象?

mongodb - 查找具有最接近整数值的文档

通过 Spring Boot 应用程序访问 mongodb 时的身份验证错误

try 解析序列化 JSON 字符串时处理 MongoDB 的 ISODate()

MongoDB 存储 ObjectId 的数组

如何在mongoose中加入两个集合

Mongoose.js:嵌套属性的原子更新?

MongoDB + Node JS + 基于角色的访问控制 (RBAC)

Mongoose:查询starts with

使用 C# 聚合 $lookup