【发布时间】:2018-03-26 10:22:19
【问题描述】:
当我将 1 家医院的 objectid 从 Postman 传递给该程序时,它只返回 empty array。但是有one data 与objectid 匹配。你能帮我解决这个问题吗?当我尝试在控制台中调试程序时,我看到了array is empty。
医生.js:
var express = require('express');
var router = express.Router();
var app=express()
var bodyParser = require("body-parser");
var validator = require('validator');
var mongo= require('./mongoconnect')
var authentication=require('./check_authentication')
var validate = require('./validation')
var ObjectId=require('mongodb').ObjectId
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
router.post('/',function(req,res)
{
if(validate.name(req.body.name) && validate.length(req.body.name) && validate.empty(req.body.name))
{
if(validate.empty(req.body.hospital_id))
{
mongo.find("hospital","_id",ObjectId(req.body.hospital_id),function(result1)
{
if(result1.length==1)
{
res.send("succcess")
}
})
}
}
})
module.exports = router;
MongoDB 的集合是:
医院:
{
"_id" : ObjectId("5aa92df0ec6b3cc78ff88afd"),
"name" : "apollo_hospitals"
}
{
"_id" : ObjectId("5aa92df9ec6b3cc78ff88afe"),
"name" : "fortis"
}
mongoconnect.js:
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/";
var dbo=null;
exports.connection=function()
{
if(dbo!=null) return
MongoClient.connect(url, function(err, db)
{
if (err) throw err;
dbo = db.db("hospital_api");
});
}
var get = function (){
return dbo;
}
exports.find=function(collections,key,value,callback)
{
get().collection(collections).find({key:value}).toArray(function(err,result)
{
// console.log(collections)
// console.log(key)
// console.log(value)
if(err) throw err;
console.log(result)
callback(result)
})
}
【问题讨论】:
-
在您的 mongo.find 函数中,您是否尝试过将 id 直接作为搜索参数传递,而不是将其包装在
ObjectId()函数中。所以不要mongo.find("hospital","_id",ObjectId(req.body.hospital_id)试试mongo.find({"hospital","_id": req.body.hospital_id}) -
@Stretch0 也尝试过。不工作:(
-
req.body.hospital_id 的值应该在字符串中。所以请检查
console.log(typeof(req.body.hospital_id))的值。如果它返回的不是字符串,则需要将其转换为字符串,然后传入查询。
标签: javascript node.js mongodb express mongodb-query