给定相同的查询,node-mongo-native和mongo-shell返回不同的结果

鉴于下一个代码:

var daysToBeOld = 7; var dateOlder = moment().subtract(daysToBeOld, 'days').toDate(); MongoClient.connect(mongouri, function(err, db) { console.log('Filtering pending topics before: %s', dateOlder); var conditions = {status: 'pending', updated: {$lt: dateOlder}}; console.log('Using the next filters: %j', conditions); var topicsCol = db.collection('topics'); topicsCol.find(conditions).toArray(function (err, topics) { if (err) { console.log(err); } console.log("found %j topics", topics); callback(err, topics); }); }); 

我得到下一个console.log结果。 正如你所看到的结果是一个空的数组:

 Filtering pending topics before: Tue Feb 21 2017 15:13:35 GMT+0000 (UTC) Using the next filters: {"status":"pending","updated":{"$lt":"2017-02-21T15:13:35.191Z"}} found [] topics 

如果我对mongo-shell执行相同的查询,它将返回一个文档:

即:

 > db.topics.find({"status":"pending","updated":{"$lt":"2017-02-21T15:13:35.191Z"}}) { "_id" : "076bbbc0-e318-11e6-9375-e94b488c7ad8", "status" : "pending", "text" : "lalalalalla", "topicType" : "Información", "member" : "NoUsuarioForus", "service" : "Limpieza", "idCard" : "", "receiveAnswer" : "1", "toc" : "1", "date" : ISODate("2016-08-31T16:36:45Z"), "sender" : { "name" : "alalalal", "email" : "alalalalala@lalalalal.com" }, "__v" : 0, "deleted" : false, "answered" : true, "firstAnswerTime" : 15614529, "updated" : "2016-02-01T17:28:34.868Z" 

为什么我在从node-mongo-native启动的查询中找不到结果?

我的节点 – mongo-native版本是2.2.24。

我已经开始使用mongoose,但切换到节点mongo本地进行这个查询,因为我认为这是一个与mongoose的问题。 顺便说一句我要发布我的模式,如果有助于澄清为什么它不工作:

topic.js:

 var mongoose = require('mongoose'); var mongoosePaginate = require('mongoose-paginate'); var Schema = mongoose.Schema; var uuid = require('node-uuid'); var xss = require('xss'); var TopicSchema = new Schema({ _id: { type: String, default: uuid.v1 }, status: { type: String, // open: When the message is created first time or not exists // pending: The issue has been answered by some employee. Waiting for answer from the customer // closed: The issue has been resolved enum: ['open', 'closed', 'pending'] }, sender: { name: String, email: { type: String, required: true, } }, text: { type: String, required: true }, date: { type: Date, default: Date.now }, updated: { type: Date }, // If the topic is answered by an user different than creator it will be true answered: { type: Boolean, default: false }, firstAnswerTime: Number, centerId: String, topicType: String, member: String, service: String, idCard: String, receiveAnswer: String, toc: String, satisfaction: Number, deleted: { type: Boolean, default: false } }); TopicSchema.plugin(mongoosePaginate); TopicSchema.pre('save', function(next) { this.updated = new Date(); this.text = xss(this.text); next(); }); module.exports = mongoose.model('Topic', TopicSchema); 

在底层集合中, updated字段以string的forms存储,并在您的应用程序中查询它作为一个date,这将不会产生任何东西,但是当你在mongo shell中使用string查询它时,它会正确地返回文档。

看到updated字段是一个string,尝试查询它作为一个即改变查询variables

 var dateOlder = moment().subtract(daysToBeOld, 'days').toISOString();