题 获取MongoDB中插入文档的_id?


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

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

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

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

有更容易的方法吗? (也, doc 在这个实例中由于某种原因返回null)


23
2018-01-03 08:06


起源




答案:


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

提问者编辑:

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

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

36
2018-01-03 08:11



对于那些较新的.NET,这仍然不明确。在什么c尖锐的物体我可以提取新的ID?你可以发布示例代码吗? - Vincent Buscarello


将对象插入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
});

11
2017-12-14 06:22





如上面的评论,在模型中添加fild ID

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

使用:

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

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


3
2017-07-26 15:15





如果你知道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>();

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


0
2018-03-01 12:11