我在远程主机上设置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个条目,但我不认为这是一个问题。