node.js - 尽管在查询数组时存在 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
解决方案
你在做String
比较。
"service" : ObjectId("5dfdc486c15893250df1")
它是ObjectId
类型。但查询包含
"service": {
"$in": [
"5dfdc486c15893250df1"
]
}
您需要将上述内容替换为
"service": {
"$in": [
ObjectId("5dfdc486c15893250df1")
]
}
同样适用于其他领域。
推荐阅读
- c# - 为什么 SonarQube 8.3 不检查 C# 代码?
- virtualbox - VboxManage guestcontrol VBOX_E_IPRIT_ERROR (0x80bb0005),指定的用户无法登录来宾,上下文:WaitForArray
- reactjs - Axios 错误处理 err.response 对象
- node.js - 将 nguniversal/express-engine 添加到 Angular 项目:“在 /src/app/app.module.ts 中找不到 BrowserModule 导入”
- c - 如何更改C中链表中节点的数据?
- c++ - 无法分配 C++ 数组
- javascript - 如果 id 有特定的类,使用 JS/jQuery Show() + Hide() 排序?
- python - TypeError:无法将 int 隐式转换为 str
- verilog - 为什么数组不能为 wdata 赋值?
- python - 使用 Python 在 BigQuery 中创建表的范围分区