2016-04-14 13 views
1
var foo = [ [ 14, 31, 55, 56, 60, 19 ], [30, 32, 33, 50, 64, 6 ], [9, 15, 22, 35, 48, 3] ]; 

var bar = await Model.find({ 
    numbers: { $in: foo } 
    }); 

console.log(bar); 

Yukarıdaki kodu çalıştırmaya çalıştığımda aşağıdaki hatayı alıyorum. Model bir mongoose modelidir ve sorgu, robomongo kullanarak ham bir mongodb sorgusunda hiçbir problem olmadan çalışır. buna doğrulama var yaptığında bir Number değer bekleniyor bir özelliğiyle Mongoose için diziler dizisi olan foo, geçiyoruz

{ [CastError: Cast to number failed for value "14,31,55,56,60,19" at path "numbers"] 
    message: 'Cast to number failed for value "14,31,55,56,60,19" at path "numbers"', 
    name: 'CastError', 
    kind: 'number', 
    value: [ 14, 31, 55, 56, 60, 19 ], 
    path: 'numbers', 
    reason: undefined } 
+1

'Model' öğesini nasıl kurduğunuzu gösterebilir misiniz? 'Sayılar' alanı 'Sayı' türünde bir dizi olarak tanımlanmış mı? Eğer öyleyse, başarısız olur. – BatScream

+0

'CastError', basitçe şudur: '$'' içinde bir dizi sayı olan" Diziler "i karşılaştırmaya çalıştığınızda, şemanınız' Number' olarak tanımlanır. Eğer şema olmadan çalışırsanız bunu söylerseniz, şemada tanımlanan tek bir değer yerine “değerleri” 'nin kendileri de“ diziler ”olacağından, saklanan veriler için şemanız yanlıştır. Bu nedenle şema türünüzün "sayılar" olması gerekir: [Sayı] 've değil" sayılar ": Numarayı muhtemelen tanımladığınız gibi. –

+1

Ayrıca, ** tam eşleme ** nin muhtemelen "gerçekten" ne istemediğinize ve bunun yerine muhtemelen bir dizi ['$ all'] kullanması gerektiğine de dikkat edin (https://docs.mongodb.org/manual/reference/ operatörün/sorgunun/all /) bir ['$ or'] (https://docs.mongodb.org/manual/reference/operator/query/or/) ifadesinin içindeki işlemler. Bu şekilde dizilerdeki sayıların "dizisi" nin sunulduğu dizi için "tam eşleşme" olması gerekmez, bunun yerine listedeki değerleri "tümünü" içermesi gerekir. –

cevap

1

, böylece Gelincik dizisi bir olmadığını söyleyerek size şikayet ediyor numara.

İlgili konular