获取MongoDB中插入文档的_id?

问题描述 投票:24回答:4

说我有产品清单。当我添加新产品时,我使用类似的东西保存它

var doc=products.Insert<ProductPDO>(p);

问题是我想在完成此操作后将用户重定向到包含该产品的页面。所以我需要重定向说/products/<ObjectID>

但是,我认为没有办法在没有手动查询数据库的情况下正确获取ObjectID并查找具有所有相同字段等的文档。

有没有更简单的方法? (另外,此实例中的doc由于某种原因返回null)

c# mongodb mongodb-.net-driver
4个回答
39
投票

您可以检查插入文档的id字段。它应该填写。

提问者编辑:

为了清楚起见,为了在你自己的类中创建一个id字段,你只需使用:

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

14
投票

将对象插入mongodb时,mongo将使用内部ID更新对象。

因此,如果

data = {
  title: "Howdy"
}

然后当我们将数据对象插入db时

db.collection('collectionName', function(err, collection) {
  collection.insert(data);
  console.log(data._id); // <- The mongodb id is now set on the item
});

3
投票

如上面的评论所示,在模型中添加字段ID

[BsonId]
[BsonRepresentation(BsonType.ObjectId)]
public string id { get; set; }

使用:

using MongoDB.Bson;
using MongoDB.Bson.Serialization.Attributes;

然后在插入对象时,mongo将文档的ID返回到模型的fild ID中。


0
投票

如果您知道ID的类型,您可以执行以下操作:

public static TId GetId<TId>(this BsonDocument document) where TId : struct
{
    if (document == default(BsonDocument))
    {
        throw new ArgumentNullException("document");
    }

    var id = document["_id"];

    object idAsObject;

    if (id.IsGuid)
    {
        idAsObject = (object)id.AsGuid;
    }
    else if (id.IsObjectId)
    {
        idAsObject = (object)id.AsObjectId;
    }
    else
    {
        throw new NotImplementedException(string.Format("Unknown _id type \"{0}\"", id.BsonType));
    }

    var idCasted = (TId)idAsObject;

    return idCasted;
}

像这样使用它:

Guid idOfDoc = myBsonDocument.GetId<Guid>();

你应该优先考虑选择答案中的专属财产......

© www.soinside.com 2019 - 2024. All rights reserved.