node.js - 使用 Node 的 Mongodb find() 不返回所有文档(奇怪的行为)

标签 node.js mongodb meteor

我正在使用 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/

相关文章:

python - 针对内存中的数据运行 mongo 查询

MongoDB Go 驱动程序无法正确解码嵌套文档

node.js - 使用 Phusion Passenger 的 Next.js 应用程序的启动脚本(使用文件启动生产构建)?

javascript - 回调必须是 Node 中的函数

node.js - 如何与mongoose一起执行排序和限制查询?

node.js - NodeJS类结构中的MongoDB

node.js - 无法在用于从一种方法到另一种方法的服务器端代码测试的 nodeunit 测试用例中获取对象值

javascript - Meteor 的简单模式,不返回数字的方法

javascript - CKeditor 不使用 Meteor 渲染

javascript - Meteor js 使用 webservices SOAP 使用包 zardak/soap