Bu cevabın zaten kabul edildiğini biliyorum, ancak mongoose'un çoğu döküm işini sizin için yaptığını belirtmek istedim. Mongoose'un bunu yapması uygun olsa da, mongo'nun gerçek davranışını soyutlar.
PersonCollection.find({_id: "4cdf00000000000000007822"}, ...);
Bunun nedeni ise: bu olur eser değil (firavun faresi olmadan) doğrudan veritabanını sorgulamak çalışırsa, ancak
PersonModel.findById("4cdf00000000000000007822", ...);
: Örneğin, firavunfaresi böyle bir şey yapalım ObjectIds dizeleri değil, nesnelerdir. Dahili olarak, firavun faresi bir objectId için bu dizeyi dönüştürür ve sonra nihai sorgu böyle tür görünüyor böylece veritabanında bir sorgu gerçekleştirir:
PersonCollection.find({_id: ObjectId("4cdf00000000000000007822")}, ...);
Ayrıca, şemasındaki her yolu "pudra" yöntemi vardır. Bu özel bir yöntem, ama ihtiyacın olduğunda çok kullanışlı. caster
AŞAĞIDAKİ BELİRTİLEN YÖNTEMLERİN BELİRLENMEMİŞ VE UYARI OLMADAN DEĞİŞTİRİLMESİNİ LÜTFEN UNUTMAYIN. (Bağırıyor için üzgün) KENDİ RİSK AT KULLANIMI:
// Use PersonModel.schema.paths() to get all paths and loop over them if you want
var key = "name";
var pathObj = PersonModel.schema.path(key);
if(!pathObj) pathObj = PersonModel.schema.virtualpath(key);
if(!pathObj) { /* not found: return, continue, exit, whatever */ }
// UNDOCUMENTED: USE AT YOUR OWN RISK
var caster = pathObj.caster || pathObj;
var castedValue = caster.cast(req.body.name);
bunu biliyorum Neden? Çünkü, mongo'nun toplanma gibi daha gelişmiş özelliklerinden bazılarını kullanmak isterseniz, boru hattını oluştururken kendi değerlerinizi kullanmanız gerekir. Ayrıca, $in
operatörünü kullanan belirli sorgular için değerleri manuel olarak çevirmem gerekiyordu ... belki de buna artık gerek yok. Puan, beklediğiniz sonuçları almakta sorun yaşıyorsanız, değerleri kendiniz almayı deneyin.
_ "İlk nesnenin istekten geldiğine dikkat edin, bu nedenle tamamen Dizeler tarafından yapılmıştır." _ - Neden uygun yerlere bir sayı ve bir boole döndürmek için onu değiştirmiyorsunuz? Aldığım cümlede "öylesine" kullanımınız sadece dizelere izin verildiğini ima eder, ancak JSON ise bu doğru değildir. (Yani, JSON kendisi dize tabanlı bir biçimdir, ancak _represent_ number ve booleans olabilir ve JSON ayrıştırıldığında bu özellikler sayı ve boole haline gelir ...) – nnnnnn
Şemanızdaki özellikler sabit mi, yoksa ihtiyacınız mi? Dinamik mi? – Mahn
@nnnnnn Sorun, Express'in 'myObject [name]: name, myObject [someNumber]: 23' biçimindeki bilgileri alması ve Express'in her özelliği varsayılan olarak bir String'e ayarlayarak myObject öğesini yapılandırmasıdır! – renatoargh