MongoDB / Mongoose通过查询属性

时间:2018-04-27 10:57:27

标签: node.js mongoose

我在远程主机上设置MongoDB并在localhost上开发应用程序。我使用Node.js和Express for server和Mongoose(v.5.0.11)连接到MongoDB。我有以下DB实体结构"访问"描述:

var Visits = new Schema({
  client: {
    type: Schema.ObjectId,
    ref: 'Client',
    required: true,
  },
  sources: Object,
  landingReached: {
    type: Boolean,
    required: true,
    default: false,
  },
  date: {
    type: Date,
    required: true,
    default: new Date(),
  },
  trackLink: {
    type: String,
    ref: 'TrackLink',
    required: true,
  },
  offer: {
    type: String,
    ref: 'Offer',
    required: true,
  },
  geoRef: {
    type: Schema.ObjectId,
    ref: 'Geo',
  },
  finalURL: String,
  domain: String,
  prelandURL: {
    type: String,
    required: true,
    default: '',
  },
})
Visits.plugin(idvalidator)
var VisitsModel = mongoose.model('Visits', Visits)
module.exports.Visits = VisitsModel

我想通过优惠查询所有访问次数。例如。如果offer = [10,17],但这里出现错误。我尝试过至少一次访问,其中包含offer = 17.他们当然在数据库中,因为我可以在目标服务器上的MongoDB中查询它们:

> db.visits.find({offer:17}).limit(1)
{ "_id" : ObjectId("5ad88c6cd3ac832134dd55c9"), "landingReached" : true, "date" : ISODate("2018-04-19T12:32:44.418Z"), "prelandURL" : "", "client" : ObjectId("5ad88c6cd3ac832134dd55c8"), "trackLink" : "65", "sources" : { }, "offer" : 17, "geoRef" : ObjectId("5ab50cf7a7999b1a5836fcf2"), "finalURL" : "", "domain" : "", "__v" : 0 }

但是使用Mongoose代码我找不到它:

 schemas.Visits.find({offer: 17}).
      limit(1).
      exec((err, vis) => {
        console.info(err, vis)
      })
    schemas.Visits.find({offer: '17'}).
      limit(1).
      exec((err, vis) => {
        console.info(err, vis)
      })

两种变体都导致" null []"日志中的回应

但是,如果我使用trackLink属性查询 - 一切正常:

schemas.Visits.find({trackLink: 65}).
      limit(1).
      exec((err, vis) => {
        console.info(err, vis)
      })

返回与MongoDB相同的值。

我不知道为什么会这样做。我试图以不同的方式传递offerId(作为String,作为Number,甚至是ObjectId)。我首先尝试查询Offer,然后使用它的_id属性来查询Visits。还检查了模式文件是否正确以及MongoDB URL和身份验证数据是否正确。我很感激任何想法。

注意:访问表中有近16000个条目,但我不认为这是一个问题。

0 个答案:

没有答案