根据_id获取数据

时间:2019-10-22 11:30:11

标签: mongodb

我尝试在nodejs内查询MongoDB以获取_id x我使用的数据

async function getTestData(id){

    return new Promise((resolve, reject) => {

        MongoClient.connect(uri, { useNewUrlParser: true, keepAlive: 1 }, function(err, client) {
            const dbo = client.db("test");
            var query = { _id: id };
            dbo
                .collection("smscripts")
                .find(query)
                .project({ 'data' : 1})
                .toArray(function(err, items) {
                    err
                        ? reject(err)
                        : resolve(items);

                });

        });

    });
}

查询是

{ _id: '5dada7dfdca94dbaf65d9547' }

但是我总是返回一个空数组。任何人都可以帮助我,为什么数组总是空的?顺便说一句,err为空。该ID确实存在。

2 个答案:

答案 0 :(得分:1)

mongo数据库中的

_id 的前缀为 ObjectId

因此您需要先尝试一下

id = ObjectId("507c7f79bcf86cd7994f6c0e")

然后将其与ID进行比较。

希望对您有帮助

答案 1 :(得分:0)

  • 首先,您需要导入。

    import { ObjectId } from "bson"

  • 然后在您的代码“ var query = {_id:id}; ”中将其替换为此。

    var query = { '_id' : ObjectId(id) }

  • 然后,在您的代码中使用.toArray()方法。这将花费更多时间 将结果转换为数组。因此,在继续操作之前,您需要使用await关键字。

  • 使用异步等待模式,这非常简单..

    const client = await MongoClient.connect(uri, { useNewUrlParser: true, keepAlive: 1 })
            .catch(err => { console.log(err); });
    
    if (!client) return;
    

    尝试{

        const dbo = client.db('test');
    
        let collection = dbo.collection('smscripts');
    
        let query = { '_id' : ObjectId(id) };
        let projection =  { 'data' : 1 }  ; 
    
        let cursor = await collection.find(query, projection).toArray();
    
        console.log(cursor);
        return cursor; 
    
    } catch (err) {
    
        console.log(err);
    } finally {
    
        client.close();
    }
    
  • 希望这对您有用。