我尝试在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确实存在。
答案 0 :(得分:1)
_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();
}
希望这对您有用。