Node.js 使用节点的Mongodb find()未返回所有文档(奇怪的行为)

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

我使用Meteor with Node从MongoDB集合中检索车辆列表,该集合托管在mLab上。我最近注意到,我的js应用程序中的
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并对其进行更改。原来的数据库还在说话,所以我得到了“旧”的结果。

听起来好像有某种数据问题。您是否尝试过导出数据并将其重新导入新数据库?也许索引被破坏了。或您的示例显示年份是一个字符串,缺少的记录在年份字段中有数字吗?我喜欢这两种想法,但没有。我删除了这个集合,并再次创建了它,得到了相同的结果。在每个文档中,属性都是字符串,无论它们是否包含数字。不过,谢谢!我刚刚添加了两个文档的示例,一个未返回,另一个未返回。听起来好像存在某种数据问题。您是否尝试过导出数据并将其重新导入新数据库?也许索引被破坏了。或您的示例显示年份是一个字符串,缺少的记录在年份字段中有数字吗?我喜欢这两种想法,但没有。我删除了这个集合,并再次创建了它,得到了相同的结果。在每个文档中,属性都是字符串,无论它们是否包含数字。不过,谢谢!我刚刚添加了两份文件的示例,一份没有返回,另一份也没有返回。这发生在我们当中最好的人身上:)至少你有足够的勇气承认错误。把它归因于经验——这种事不会再发生在你身上了,是吗?它发生在我们中最好的人身上:)至少你有足够的勇气承认错误。把它归结为经验——这种事不会再发生在你身上了,是吗?