Javascript 如何使用id mongodb在嵌入式文档数组中查找数据?

Javascript 如何使用id mongodb在嵌入式文档数组中查找数据?,javascript,node.js,mongodb,Javascript,Node.js,Mongodb,我使用mongodb和nodejs来查找嵌入文档中的数据。奇怪的是,查询在数据库中工作,但在实际的nodejs代码中却不工作 这是我的数据对象: { "_id" : ObjectId("5c65866488a1c53464e46dc7"), "cat_lang" : [ { "_id" : ObjectId("5c65866488a1c53464e46dc8"), "en" : "temp", "it" : "temp" } ],

我使用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")}}})

但是当在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) => {...})

您好@Anthony Winzlet如果您看到我的问题,我已经尝试过这种方法,因为某些原因,它不会获取确切的文档,而是获取整个对象。我的意思是从“_id”:ObjectId(“5C6586488A1C53464E46DC7”)到结束。仅获取此Id的单个文档需要什么-->“_Id”:ObjectId(“5C6586488A1C53464E46DCA”)感谢这是另一回事。使用nodejs代码尝试上述答案。然后我会让你知道这个问题谢谢你,你是个救生员!!我花了一整天的时间在这上面,但效果很好
this.collection("sideservices").find({
  "providers": { "$elemMatch": { "_id": ObjectId("5c65866488a1c53464e46dca") } }
})
.project({
  "providers": { "$elemMatch": { "_id": ObjectId("5c65866488a1c53464e46dca") } }
})
.toArray((err,res) => {...})