【问题标题】:MongoDb: using string as IdMongoDb:使用字符串作为 Id
【发布时间】:2011-11-01 10:14:43
【问题描述】:

我有以下对象:

public class Client
{
    [BsonId]
    public string Name { get; set; }
    public List<string> Links { get; set; }
}

我可以毫无问题地创建/删除它。但是当我想更新名称时,它不起作用。

var query = Query.EQ("_id", id); //id - old name
var update = Update.Set("_id", name); //name - new name
Coll.Update(query, update);

据我所知,回答(来自评论)是获得额外 ID 的唯一方法:

对象:

public class Client
{
    [BsonId]
    public Id { get; set; }
    public string Name { get; set; }
    public List<string> Links { get; set; } 
}

更新名称:

var query = Query.EQ("_id", ObjectId.Parse(id));
var update = Update.Set("Name", name);
Coll.Update(query, update);

【问题讨论】:

  • 我没用过mongoDB c# api,但是Update.Rename("_id", name);不应该是Update.Rename("name", name);吗? (_id => 名称)
  • 使用[BsonId],驱动将其序列化为_id
  • 另一方面,我找到了可以的答案。只要你任何类型(数组除外)stackoverflow.com/questions/11090446/…

标签: mongodb mongodb-.net-driver


【解决方案1】:

由于_id是主键,MongoDB中不允许修改_id

如果您需要更改唯一名称属性,只需在其上添加唯一索引即可,而不是将其用作主键字段。

【讨论】:

  • 请展示示例。我想将 url 设置为主键,然后我给了这个,但它不起作用 doc1.append("_id", url);try { coll.insert(doc1); }
  • 所以你的意思是不能使用任何其他字段作为主键而不是_id?摆脱它会很好,因为我不需要它。
猜你喜欢
  • 2012-07-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-12
  • 2012-06-20
  • 1970-01-01
  • 2019-03-12
  • 2018-08-30
相关资源
最近更新 更多