Mongoose: الاستعلام مقابل ObjectIds باستخدام عاملي التشغيل $ lt و $ gt

تم إنشاؤها على ٣ سبتمبر ٢٠١٤  ·  3تعليقات  ·  مصدر: Automattic/mongoose

بافتراض مخطط بخاصية _id ، أريد الاستعلام باستخدام عامل تشغيل $gt . استعلام MongoDB المكافئ:

db.applications.find({ _id : { $gt : ObjectId("53ddb3c00000000000000000") } })

ولكن ، على جانب النمس ، عند استخدام كائن من النوع ObjectId ، فإنه يرمي:

var minimumObjectId = new mongoose.Schema.ObjectId(minimumObjectIdString);
Applcation.find({ _id : { $gt : minimumObjectId } }) 
/*
{ [CastError: Cast to ObjectId failed for value "ObjectId('53de7ea3000000000000000')" at path "_id"]
  message: 'Cast to ObjectId failed for value "ObjectId(\'53de7ea3000000000000000\')" at path "_id"',
  name: 'CastError',
  type: 'ObjectId',
  value: 'ObjectId(\'53de7ea3000000000000000\')',
  path: '_id' }
*/

كما تفعل سلسلة بسيطة:

Application.find({ _id : { $gt : minimumObjectIdString } })

لقد جربت شيئًا مجنونًا مثل:

Application.find({ _id : { $gt : "ObjectId('" + minimumObjectIdString + "')" } })

التعليق الأكثر فائدة

هذا لا يعمل بالنسبة لي

ال 3 كومينتر

@ vkarpov15 ، أعتقد أن هذا قد يكون أيضًا مشكلة في السائق الأصلي الأساسي ، حيث حاولت أن أفعل شيئًا مثل:

Application.collection.find({ _id : { $gt : "53f0c1850000000000000000" } }, function(err, cursor) {
    console.log(err)
    cursor.toArray(function(results){
        console.log(results);
    })
})

ماذا تفعل للحصول على minimumObjectIdString ؟ يجب استخدام mongoose.Types.ObjectId بدلاً من mongoose.Schema.ObjectId

var minimumObjectId = new mongoose.Types.ObjectId(minimumObjectIdString);
Applcation.find({ _id : { $gt : minimumObjectId } }) 

يجب أن تعمل مع سلسلة أيضًا.

هذا لا يعمل بالنسبة لي

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات