首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >节点-mongo本机和mongo-shell在相同的查询下返回不同的结果。

节点-mongo本机和mongo-shell在相同的查询下返回不同的结果。
EN

Stack Overflow用户
提问于 2017-02-28 15:50:48
回答 1查看 264关注 0票数 2

给出下一个代码:

代码语言:javascript
复制
  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结果。如您所见,结果是一个空数组:

代码语言:javascript
复制
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执行相同的查询,它将返回一个文档:

即:

代码语言:javascript
复制
> 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"

为什么我在从节点芒果本地启动的查询中没有得到任何结果?

我的节点-mongo本地版本是2.2.24。

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

topic.js:

代码语言:javascript
复制
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);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-28 16:11:12

在基础集合中,updated字段存储为字符串,在应用程序中将其作为日期进行查询,这不会产生任何结果,但当您使用字符串在mongo中查询它时,它将正确返回文档。

看到updated字段是字符串,尝试将其查询为字符串,即将查询变量更改为

代码语言:javascript
复制
var dateOlder = moment().subtract(daysToBeOld, 'days').toISOString();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42513203

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档