javascript - 如何使用 id mongodb 在嵌入式文档数组中查找数据?
问题描述
我正在使用 mongodb 和 nodejs 在嵌入式文档中查找数据。奇怪的事实是查询在数据库中有效,但在实际的 nodejs 代码中无效。
这是我的数据对象:
{
"_id" : ObjectId("5c65866488a1c53464e46dc7"),
"cat_lang" : [
{
"_id" : ObjectId("5c65866488a1c53464e46dc8"),
"en" : "temp",
"it" : "temp"
}
],
"providers" : [
{
"_id" : ObjectId("5c65866488a1c53464e46dc9"),
"provider_name" : "temp0",
"url" : "http://uber.com",
},
{
"_id" : ObjectId("5c65866488a1c53464e46dca"),
"provider_name" : "temp1",
"url" : "http://uber2.com",
}
]}
我已经在 mongodb shell 中尝试过这些查询,效果很好。
db.sideservices.findOne({"_id" : ObjectId("5c65866488a1c53464e46dc7")},{providers: {$elemMatch: {"_id" : ObjectId("5c65866488a1c53464e46dca")}}})
和
db.sideservices.find({"providers._id":ObjectId("5c65866488a1c53464e46dca")},{'providers.$':1})
但是当在 nodejs 中使用相同的函数时,它会返回整个对象而不是具有给定 id 的文档。
this.db.collection('sideservices').find({'providers':{'$elemMatch':{'_id':ObjectId('5c65866488a1c53464e46dca')}}}).toArray((err,res) => {...})
解决方案
你可以这样做
this.collection("sideservices").find({
"providers": { "$elemMatch": { "_id": ObjectId("5c65866488a1c53464e46dca") } }
})
.project({
"providers": { "$elemMatch": { "_id": ObjectId("5c65866488a1c53464e46dca") } }
})
.toArray((err,res) => {...})
推荐阅读
- dbunit - 在 .xml 中创建预期状态数据库
- pandas - 将低于阈值的 value_counts 设置为其他
- angular - 从其他组件访问 Angular 7 中 index.html 中的元素
- javascript - PointerLockControls threejs“null 不是对象(正在评估'instructions.addEventListener')”
- html - How to avoid jumping html elements over each others
- server - 控制和监控代理服务器 IPv4
- oracle - 使用 Oracle PL/SQL 中的存储过程更改表的列名
- php - Woocommerce 最小数量基于为每个产品分离的用户角色
- c# - 请展示如何将位图文件保存到目录
- node.js - Nestjs如何同时使用http请求和Websocket