Node.js 使用节点的Mongodb find()未返回所有文档(奇怪的行为)
我使用Meteor with Node从MongoDB集合中检索车辆列表,该集合托管在mLab上。我最近注意到,我的js应用程序中的Node.js 使用节点的Mongodb find()未返回所有文档(奇怪的行为),node.js,mongodb,meteor,Node.js,Mongodb,Meteor,我使用Meteor with Node从MongoDB集合中检索车辆列表,该集合托管在mLab上。我最近注意到,我的js应用程序中的find()没有返回集合中所有匹配的文档。使用MongoShell和在mLab上搜索都会返回正确数量的结果 下面是收集中的一个示例文档,它在创建时不会返回 应该是: { "_id": "VIN", "updatedOn": "Fri Aug 11 2017 11:27:40 GMT-0400 (EDT)", "clientId": "1001
find()
没有返回集合中所有匹配的文档。使用MongoShell和在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)
})
)
}
})
)
现在是奇怪的部分。所有返回的文档都具有2017-7-31
或更早版本的yardDate
。这可能是巧合,但我不这么认为。我的收藏大约有21000个文档,所有查询都表现出相同的行为
我看了这个问题,但我的一些查询只有一个或两个结果,所以我认为这不是缓冲区溢出问题
谢谢你能给我的帮助
更新:
我制作了一个小测试文件,看看在我的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()
})
})
这应该返回五个文档,但只返回两个。。。所有带有早于2017年7月31日的码的
更新:
我添加了一个“缺失”结果和一个“找到”结果。结果是。。。当我将数据库移动到mLab时,我没有在应用程序中找到所有URL并对其进行更改。原来的数据库还在说话,所以我得到了“旧”的结果。结果是。。。当我将数据库移动到mLab时,我没有在应用程序中找到所有URL并对其进行更改。原来的数据库还在说话,所以我得到了“旧”的结果。听起来好像有某种数据问题。您是否尝试过导出数据并将其重新导入新数据库?也许索引被破坏了。或您的示例显示年份是一个字符串,缺少的记录在年份字段中有数字吗?我喜欢这两种想法,但没有。我删除了这个集合,并再次创建了它,得到了相同的结果。在每个文档中,属性都是字符串,无论它们是否包含数字。不过,谢谢!我刚刚添加了两个文档的示例,一个未返回,另一个未返回。听起来好像存在某种数据问题。您是否尝试过导出数据并将其重新导入新数据库?也许索引被破坏了。或您的示例显示年份是一个字符串,缺少的记录在年份字段中有数字吗?我喜欢这两种想法,但没有。我删除了这个集合,并再次创建了它,得到了相同的结果。在每个文档中,属性都是字符串,无论它们是否包含数字。不过,谢谢!我刚刚添加了两份文件的示例,一份没有返回,另一份也没有返回。这发生在我们当中最好的人身上:)至少你有足够的勇气承认错误。把它归因于经验——这种事不会再发生在你身上了,是吗?它发生在我们中最好的人身上:)至少你有足够的勇气承认错误。把它归结为经验——这种事不会再发生在你身上了,是吗?