2011-01-03 16 views
19

bir ürün listeme sahibim. Yeni bir ürün ekleyin zaman sorun bu ürünle sayfasına yönlendirecek için yapılır sonra istediğim olmasıdır oMongoDB'ye eklenen bir belgenin _idini alın?

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

gibi bir şey kullanarak kaydedin. Bu yüzden, /products/<ObjectID>

için yeniden yönlendirme yapmam gerekiyor. Ancak, veritabanını el ile sorgulamadan ve aynı alanların ve benzerlerinin bulunduğu bir belgeye bakmadan ObjectID'yi hemen almanın bir yolunu göremiyorum.

Daha kolay bir yolu var mı? (ayrıca, bu örnekte doc bazı nedenlerle null değerini döndürür)

cevap

31

Eklenen belgenin id alanını denetleyebilirsiniz. Bu doldurulmalıdır

asker Düzenleyen:.

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

Bir nesneyi eklediğinizde:

Sadece sadece kullanmak kendi sınıflarında bir kimlik alanını yapmak için, açık olmak mongodb içine, mongo nesneyi iç ID ile güncelleyecektir. Yukarıda yorum olarak db

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

içine veri nesnesi eklediğinizde

Yani

data = { 
    title: "Howdy" 
} 

Sonra, ile modelinde verebilecek bir noktaya yerleştirin kimliğini ekleyin

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

kullanarak:

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

ve sonra nesneyi eklediğinizde, mongo belgenin kimliğini modelin birinci kimliğine döndürür.

0

Eğer kimlik türünü biliyorsanız böyle bir şey yapabilirsiniz:

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; 
} 

böyle kullanın:

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

Hala prefere gerektiğini

seçilen cevap olarak özel bir özelliği vardır ...

İlgili konular