C# 获取MongoDB中插入文档的\u id?
假设我有一个产品清单。当我添加一个新产品时,我会使用以下方式保存它C# 获取MongoDB中插入文档的\u id?,c#,mongodb,mongodb-.net-driver,C#,Mongodb,Mongodb .net Driver,假设我有一个产品清单。当我添加一个新产品时,我会使用以下方式保存它 var doc=products.Insert<ProductPDO>(p); var doc=products.Insert(p); 问题是,在完成此操作后,我希望将用户重定向到包含产品的页面。所以我需要重定向到/products/ 但是,如果不手动查询数据库并查找具有所有相同字段等的文档,我看不到任何方法可以在以后正确获取ObjectID 有没有更简单的方法?(另外,doc在本例中由于某种原因返回null)插
var doc=products.Insert<ProductPDO>(p);
var doc=products.Insert(p);
问题是,在完成此操作后,我希望将用户重定向到包含产品的页面。所以我需要重定向到/products/
但是,如果不手动查询数据库并查找具有所有相同字段等的文档,我看不到任何方法可以在以后正确获取ObjectID
有没有更简单的方法?(另外,
doc
在本例中由于某种原因返回null)插入方法自动设置声明为模型BSON ID的属性
如果声明如下
[BsonId]
public ObjectId Id { get; set; }
。。。将对象插入集合后,Id
字段将包含对象的默认(新的、唯一的)BSON Id:
coll.Insert(obj);
// obj.Id is now the BSON ID of the object
将对象插入mongodb时,mongo将使用内部ID更新对象 所以如果 然后当我们将数据对象插入数据库时
db.collection('collectionName', function(err, collection) {
collection.insert(data);
console.log(data._id); // <- The mongodb id is now set on the item
});
db.collection('collectionName',函数(err,collection){
收集.插入(数据);
console.log(data._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>();
public static TId GetId(此BsonDocument文档),其中TId:struct
{
if(document==默认值(BsonDocument))
{
抛出新的异常(“文档”);
}
var id=文档[“_id”];
对象和对象;
if(id.IsGuid)
{
idAsObject=(对象)id.AsGuid;
}
else if(id.IsObjectId)
{
idAsObject=(object)id.AsObjectId;
}
其他的
{
抛出新的NotImplementedException(string.Format(“未知的_id类型\“{0}\”,id.BsonType));
}
变量idCasted=(TId)idAsObject;
返回idCasted;
}
像这样使用它:
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>();
Guid idOfDoc=myBsonDocument.GetId();
不过,您还是希望在所选答案中有一个专用属性…我正在将自定义类型T
转换为BsonDocument
,然后再将其持久化
var bsonDocument = item.ToBsonDocument();
_mongoCollection.InsertOne(bsonDocument);
T
具有属性Id:
[BsonId]
public ObjectId Id { get; set; }
调用ToBsonDocument()
时,Id
字段将填充ObjectId
,并将其推送到Mongo DB
它在代码中自己创建Id,而不是委托Mongo DB来创建它。但这就足够了。classbsonid
class BsonID
{
[BsonId]
public ObjectId Id { get; set; }
}
var document = new BsonDocument {
{"_id", new BsonID().Id },
{ "code", dr.Cells["code"].Value.ToString() },
{ "name", dr.Cells["name"].Value.ToString() },
};
var customers = _database.GetCollection<BsonDocument>("Customers");
customers.InsertOne(document);
var id = document.ElementAt(0).Value.ToString();
{
[BsonId]
公共对象Id{get;set;}
}
var文档=新的BsonDocument{
{“_id”,新的BsonID().id},
{“code”,dr.Cells[“code”].Value.ToString()},
{“name”,dr.Cells[“name”].Value.ToString()},
};
var customers=_database.GetCollection(“客户”);
客户。InsertOne(文件);
var id=document.ElementAt(0.Value.ToString();
对于那些更新到.NET的对象,这仍然不清楚。我可以在哪个c sharp对象中提取新ID?您可以发布示例代码吗?您可以从插入的类对象中提取ObjectId(ID)。这只适用于insertOne?我似乎不适用于insertMany。。。