如果我想用POCO读写mongo数据

public class Thingy
{
     public string Foo {get;set;}
}
...
coll.Insert(new Thing(Foo = "hello"));

当我回读时,我得到了一个失败的消息,说_id是一个意外的属性(事实就是这样).然后我在类中添加了一个名为_id的字段.现在插入不起作用,说明_id字段不能为空.try 过的BsonIgnoreIfNull属性无效.

推荐答案

插入一个对象时,如果它没有_id字段,那么驱动程序会添加一个字段,并将其设置为12字节的MongoDB ObjectId值.

您只需向POCO中添加一个Id属性,它将从_id反序列化:

public class Thingy
{
     public ObjectId Id { get; set; }
}

或者,如果您想将另一个属性委托给映射到_id,则可以用BsonIdAttribute装饰它,如下所示:

[BsonId]
public ObjectId MyKey { get; set; }   

_id字段不必是MongoDB ObjectId,您可以将其设置为任何数据类型的任何值(数组除外),它只需要在集合中是唯一的.

Mongodb相关问答推荐

MongoDB/Mongoose查询:使用优先约束检索从位置A到位置B的路径

MongoDB-如何过滤和获取数组字段中的最新数据

Mongo 聚合查找 $gte 6 个月前的日期,以DD-MM-YYYY格式存储为字符串

Mongodb,在一个查询中用正则表达式更新部分字符串

对 MongoDB 集合中的对象数组进行排序

Mongoose 更新不同类型的记录

如何在 mongodb golang 的单个更新调用中使用 $set 和 $inc?

mongoDB 过滤、排序和排名结果

Ruby on Rails 的 Cassandra、mongodb 或 couchdb

MongoDB聚合多条件

Mongoexport 在日期范围内使用 $gt 和 $lt 约束

Golang + MongoDB 嵌入类型(将一个 struct 嵌入到另一个 struct 中)

Django admin 和 MongoDB,可能吗?

如何使用 MongoDB 和 Mongoid 在 Rails 3 上进行适当的数据库测试 (TDD)

mongodb nodejs - 转换圆形 struct

直接从 URL 查询字符串提供的 mongo 查询有多危险?

为什么我新创建的 mongodb 本地数据库增长到 24GB?

没有参考选项的mongoose填充字段

了解 Mongoose 中的关系和外键

有没有办法防止 MongoDB 向集合名称添加复数形式?