首页 > 解决方案 > 尽管在查询数组时存在 MongoDB 查询,但它没有返回文档

问题描述

我在具有以下结构的集合中有一个文档列表

{
    "_id" : "5f341c57b156dd2fa020",
    "currentAddress" : {
        "address" : "Some number, some address",
        "country" : "ABC",
        "state" : "PQR",
        "city" : "ABCD",
        "landmark" : ""
    },
    "languages" : [ 
       "5d7f2536911a2e57b25b", 
       "5dfdf059fb595309c261"
    ]
    "service" : "5dfdc486c15893250df1",
    "specialSkills" : [ 
        "5edf9423eab473331fec"
    ],
    "gender" : "5dfcaaaf03f86917017",
    "agencyId" : "5f0d76de623bef03f1e",
    "firstName" : "John",
    "lastName" : "Doe",
    "dob" : ISODate("1991-06-12T18:30:00.000Z"),
    "age" : 29
}

这是我的查询

async.waterfall([
   (callback) => {
       userSchema.find({
          "currentAddress.city": "ABCD",
          "gender": "5dfcaaaf03f86917017",
          "age": {
              "$lte": 30,
              "$gte": 20
           },
           "languages": {
               "$in": [
                 "5d7f2536911a2e57b25b",
                  "5dfdf059fb595309c261"
                ]
            },
            "service": {
               "$in": [
                  "5dfdc486c15893250df1"
                ]
             },
            "agencyId": "5f0d76de623bef03f1e",
             "specialSkills": {
                "$in": [
                   "5edf9423eab473331fec"
                ]
              }
       }, (err, userInfo) => {
           callback(err, userInfo)
       })
   }
],(err, userInfo) => {
   res.json({
     err: err,
     userInfo: userInfo
   })
})

它完美地工作并在我传递所有键值对时返回文档,除了当我传递“ specialSkills ”的键值时,不返回文档并且返回的只是一个空数组。我对出了什么问题感到困惑,我已经做了几个小时但无法弄清楚。非常感谢任何帮助。谢谢。

PS - 我在 Robo3T 中测试了查询,它工作得非常好。当我在函数中调用它时,它不会返回文档。

PPS - 我已经在瀑布模型中实现了这个功能,因此我在问题中标记了 node.js

标签: node.jsmongodbmongoose

解决方案


你在做String比较。

"service" : ObjectId("5dfdc486c15893250df1")它是ObjectId类型。但查询包含

 "service": {
       "$in": [
           "5dfdc486c15893250df1"
        ]
    }

您需要将上述内容替换为

 "service": {
       "$in": [
           ObjectId("5dfdc486c15893250df1")
        ]
    }

同样适用于其他领域。


推荐阅读