说我有产品清单。当我添加新产品时,我使用类似的东西保存它
var doc=products.Insert<ProductPDO>(p);
问题是我想在完成此操作后将用户重定向到包含该产品的页面。所以我需要重定向说/products/<ObjectID>
但是,我认为没有办法在没有手动查询数据库的情况下正确获取ObjectID并查找具有所有相同字段等的文档。
有没有更简单的方法? (另外,此实例中的doc
由于某种原因返回null)
您可以检查插入文档的id字段。它应该填写。
提问者编辑:
为了清楚起见,为了在你自己的类中创建一个id字段,你只需使用:
[BsonId]
public ObjectId ID{get;set;}
将对象插入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
});
如上面的评论所示,在模型中添加字段ID
[BsonId]
[BsonRepresentation(BsonType.ObjectId)]
public string id { get; set; }
使用:
using MongoDB.Bson;
using MongoDB.Bson.Serialization.Attributes;
然后在插入对象时,mongo将文档的ID返回到模型的fild ID中。
如果您知道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>();
你应该优先考虑选择答案中的专属财产......