我正在使用 Meteor 和 Node 从 mLab 上托管的 MongoDB 集合中检索车辆列表。我最近注意到我的 js 应用程序中的 find()
没有返回集合中的所有匹配文档。使用 Mongo shell 和 mLab 上的搜索都返回正确数量的结果。
这是集合中的示例文档,当它 应该是:
{
"_id": "VIN",
"updatedOn": "Fri Aug 11 2017 11:27:40 GMT-0400 (EDT)",
"clientId": "1001",
"crushVersion": "v.3.42",
"yardName": "YARD NAME",
"yardCity": "CITY",
"yardState": "STATE",
"stockNumber": "STK123447",
"iStatus": "0",
"location": "YARD",
"year": "2003",
"make": "AUDI",
"model": "A6",
"vehicleRow": "32",
"yardDate": "2017-08-10T18:09:38.363",
"batchNumber": "STK123447",
"lastUpdate": "08/11/2017 01:31:31 AM",
"color": "SILVER",
"vin": "VIN",
"reference": "",
"milage": "24"
}
...以及按预期返回的结果:
{
"_id": "VIN",
"updatedOn": "Fri Aug 11 2017 11:27:40 GMT-0400 (EDT)",
"clientId": "1112",
"crushVersion": "v.3.42",
"yardName": "YARD NAME",
"yardCity": "CITY",
"yardState": "STATE",
"stockNumber": "STK02752",
"iStatus": "0",
"location": "YARD",
"year": "2003",
"make": "AUDI",
"model": "A6",
"vehicleRow": "600",
"yardDate": "2017-07-20T10:28:54.407",
"batchNumber": "STK02752",
"lastUpdate": "08/11/2017 08:30:30 AM",
"color": "GRAY",
"vin": "VIN",
"reference": "",
"milage": "1"
}
...以及“查找”的 js 代码;
MongoClient.connect(
url,
Meteor.bindEnvironment((err, db) => {
if (err) throw new Meteor.Error(err)
const inv = db.collection('inventory'),
userId = user._id,
picks = _picks,
/* _picks comes from a user-populated form as an array of objects. */
makes = picks.map(pick => {
return pick.make.toUpperCase()
}),
models = picks.map(pick => {
return pick.model.toUpperCase()
}),
yards = user.profile.yards.map(yard => {
return yard.yard
})
if (picks.length > 0) {
inv
.find({
$or: user.profile.picks.map(p => ({
year: { $gte: p.minYear, $lte: p.maxYear }
})),
make: { $in: makes },
model: { $in: models },
yardName: { $in: yards }
})
.toArray(
Meteor.bindEnvironment((err, docs) => {
if (err) throw new Meteor.Error(err)
console.log(docs)
})
)
}
})
)
现在这是奇怪的部分。返回的所有文档的 yardDate
均为 2017-7-31
或更早。这可能是巧合,但我不这么认为。我的收藏有大约 21000 个文档,所有查询都表现出相同的行为。
我看了这个问题Link ,但我的一些查询只有一两个结果,所以我不认为这是缓冲区溢出问题。
感谢您提供的任何帮助!
更新:
我制作了一个小测试文件,看看我的 find()
链上是否有某些东西可能会干扰查询。这是代码:
const MongoClient = require('mongodb').MongoClient,
url = 'mongodb://user:password@ipaddress/dbname'
MongoClient.connect(url, (err, db) => {
const inv = db.collection('inventory')
inv.find({ year: '2003', model: 'A6' }).toArray((err, docs) => {
if (err) throw new Error(err)
console.log(docs)
db.close()
})
})
这应该返回五个文档,但只返回两个......所有的yardDate
都早于2017-07-31
。
更新:
我添加了一个“缺失”结果和一个“找到”结果。
最佳答案
结果...当我将数据库移至 mLab 时,我没有找到应用程序中的所有网址并更改它们。原始数据库仍在通话,因此我得到的是“旧”结果。
关于node.js - 使用 Node 的 Mongodb find() 不返回所有文档(奇怪的行为),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45639695/