首页 > 解决方案 > 如何使用 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) => {...})

标签: javascriptnode.jsmongodb

解决方案


你可以这样做

this.collection("sideservices").find({
  "providers": { "$elemMatch": { "_id": ObjectId("5c65866488a1c53464e46dca") } }
})
.project({
  "providers": { "$elemMatch": { "_id": ObjectId("5c65866488a1c53464e46dca") } }
})
.toArray((err,res) => {...})

推荐阅读