如何使用JavaScript查询MongoDB项的$类型?

w9apscun  于 2023-01-12  发布在  Go
关注(0)|答案(1)|浏览(119)

我有一个MongoDB数据库,它有一个相当非结构化的布局。我想在我的“app.js”文件中做的是确定我有什么样的BSON类型。如果它是一个数组,看看它是什么数组,从那里,将有两个可能的选项:对象或字符串。根据它是哪一个,我想做不同的事情。
目前,我正在测试,我有以下代码:

app.get("/db", function(req, res) {
    Field.find({}, function(err, foundFields){
        // This is where I would like to query the type. 
    });
});

其基本思想是迭代数据库,并在数据库的不同分支中更深入,直到到达一个字符串数组,根据分支的不同,这些字符串将处于不同的深度。
到目前为止,我发现在某种意义上我可能需要使用“$type”,但我不知道如何使用它从我所处的级别获得一个类型,然后根据2个选项检查它。

83qze16e

83qze16e1#

const MongoClient = require('mongodb').MongoClient;
const url = "mongodb://localhost:27017/";
const client = new MongoClient(url, { useNewUrlParser: true });

client.connect(function(err) {
    if (err) throw err;

    const db = client.db("mydb");
    const collection = db.collection("items");
    collection.find().toArray(function(err, docs) {
        if (err) throw err;
        docs.forEach(doc => {
            if (Array.isArray(doc.fieldName)) {
                if (typeof doc.fieldName[0] === 'object') {
                    // do something when array elements are objects
                } else if (typeof doc.fieldName[0] === 'string') {
                    // do something when array elements are strings
                }
            }
        });
        client.close();
    });
});

在本例中,代码连接到在本地主机上运行的MongoDB示例(默认端口为27017),然后选择“mydb”作为数据库,选择“items”作为集合。
一旦建立了连接,它就使用find方法检索所有文档,并使用javascript方法forEach循环遍历文档数组。
在forEach循环中,if语句使用javascript的Array.isArray方法来检查“fieldName”字段是否为数组。
如果它是一个数组,它使用typeof操作符检查数组第一个元素的类型,根据元素是对象还是字符串,它将运行相应的代码块。

相关问题