Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 我如何找出MongoDB NodeJS驱动程序不';是否返回单个集合的有效查询结果?_Node.js_Mongodb - Fatal编程技术网

Node.js 我如何找出MongoDB NodeJS驱动程序不';是否返回单个集合的有效查询结果?

Node.js 我如何找出MongoDB NodeJS驱动程序不';是否返回单个集合的有效查询结果?,node.js,mongodb,Node.js,Mongodb,我正在为NodeJS v10.16.0使用MongoDB v3.2.7。我创建了一个MongoRepository基类,我们已经在生产中使用了几年。有时在开发过程中,我会发现奇怪的行为,它不会返回特定集合的任何结果。我过去认为这是因为我没有在查询之间关闭客户机。我现在不太确定 我正在通过一个Express服务器运行代码,还有六个其他调用工作正常。然后我得到这个查询和投影,但没有结果(即使这些在命令行和Robo3T中工作): 质疑= {“pin”:“xxxxxx”,“文档ID”:“5C584A76

我正在为NodeJS v10.16.0使用MongoDB v3.2.7。我创建了一个MongoRepository基类,我们已经在生产中使用了几年。有时在开发过程中,我会发现奇怪的行为,它不会返回特定集合的任何结果。我过去认为这是因为我没有在查询之间关闭客户机。我现在不太确定

我正在通过一个Express服务器运行代码,还有六个其他调用工作正常。然后我得到这个查询和投影,但没有结果(即使这些在命令行和Robo3T中工作):

质疑= {“pin”:“xxxxxx”,“文档ID”:“5C584A76A6090BB28FF8021CB”,“第1页}, 投影={“_类”:0,“documentId”:0,“pin”:0,“base64”:0}数据=[]

我不知道如何开始调试这个。帮忙

下面是基类代码:

import { MongoClient, ObjectId } from 'mongodb';
import 'dotenv/config';

const url = process.env...; // elided to hide our secrets
const dbname = process.env...; // elided to hide our secrets

class MongoRepository
{
    /**
     * Returns the database using the configuration
     */
    async getDatabase()
    {
        if (!MongoRepository.client)
        {
            MongoRepository.client = new MongoClient(url, { useNewUrlParser: true });

            await MongoRepository.client.connect();

            if (!MongoRepository.client || !MongoRepository.client.db(dbname))
            {
                throw new Error(`Unable to connect to Mongo with URL '${url}'`);
            }
        }

        return MongoRepository.client.db(dbname);
    }

    /**
     * Override this method in children to add any special query filter for a collection.
     * @param {*} query query object to modify
     */
    addRepositoryFilter(query) {
        return query;
    }

    /**
     * Generic find method that takes a query and a projection.
     *
     * @param {*} query Lookup parameters
     * @param {*} projection Fields to return or not return from the search
     *
     */
    async find(query, projection = {})
    {
        query = this.addRepositoryFilter(query);

        let db = await this.getDatabase();

        return await db.collection(this.CollectionName).find(query).project(projection).toArray();
    }
}

export default MongoRepository;
下面是未得到结果的子类:

import MongoRepository from "./MongoRepository";

class ViewerPageRepository extends MongoRepository
{
    get CollectionName()
    {
        return 'viewerPage';
    }

    async findByPinDocumentIdPage(pin, documentId, page, projection)
    {
        documentId = this.objectIdToString(documentId);

        let query = {
            pin: pin,
            documentId: documentId,
            page: page
        };

        console.log(`Query = ${JSON.stringify(query)}, Projection = ${JSON.stringify(projection)}`);

        return await this.find(query, projection);
    }
}

export default ViewerPageRepository;

我是在考虑检查查询中
documentId
的类型后发现这一点的。它作为十六进制字符串存储在我查询的集合中。我的代码中没有包含
objectIdToString
函数,但是如果它是
ObjectId
实例,它会调用
documentId
上的
valueOf
。这本应将其转换为字符串,但出于某种原因,我返回了另一个
ObjectId
实例(可能是我调用的
valueOf
on的同一个实例-我没有检查)。因此,这似乎是由MongoDB驱动程序的
ObjectId::valueOf
方法中的错误引起的。我将报告这一问题