Node.js 返回空数组的Mongoose查询
下面是我的express端点,它返回一个空数组Node.js 返回空数组的Mongoose查询,node.js,express,mongoose,Node.js,Express,Mongoose,下面是我的express端点,它返回一个空数组 router.get('/myUnits/:landlord_id', wagner.invoke((Apartment) => { return (req, res) => { Apartment.find({ postedBy: req.params.landlord_id }, (err, apt) => { if (err) { return res.status(s
router.get('/myUnits/:landlord_id', wagner.invoke((Apartment) => {
return (req, res) => {
Apartment.find({ postedBy: req.params.landlord_id }, (err, apt) => {
if (err) {
return res.status(status.INTERNAL_SERVER_ERROR)
.json({ error: err.toString() })
}
if (!apt) {
return res.status(status.NOT_FOUND)
.json({ error: 'Not found' })
}
return res.json(apt)
})
}
}))
我更改了partment.find({price:200})
并使用price:200
查询所有数据,但查询postedBy
根本不起作用
当我转到我的mongo shell并执行查询时
db.apartments.find({ postedBy: 'the id of the account here' })
它返回适当的数据
我想出来了。它一直在我的模式中
let apartmentSchema = {
name: { type: String, required: true },
price: { type: Number, required: true },
promotion: { type: String, required: true },
postedOn: { type: Date, required: true },
postedBy: {
type: mongoose.Schema.Types.ObjectId, // this was the culprit
required: true
}
}
我只是把类型改成了字符串。我使用了我很久以前更新过的一个api中的ObjectId。谢谢你们的耐心,伙计们 我明白了。它一直在我的模式中
let apartmentSchema = {
name: { type: String, required: true },
price: { type: Number, required: true },
promotion: { type: String, required: true },
postedOn: { type: Date, required: true },
postedBy: {
type: mongoose.Schema.Types.ObjectId, // this was the culprit
required: true
}
}
我只是把类型改成了字符串。我使用了我很久以前更新过的一个api中的ObjectId。谢谢你们的耐心,伙计们 将console.log(请求参数房东id)添加到plant.find上方。输出是什么?如果这是您期望的id,请尝试从
plant.find中删除postedBy:req.params.lown_id
({…
现在它应该从db返回所有内容。是吗?@Molda感谢您的即时回复。是的,它从我的db返回所有内容,但我只希望它返回特定于房东的数据。我该怎么做?只是想确保所有内容正常工作。您没有回答我的第一个问题tho,console.log的输出是什么(req.params.lown_id)放在plant.find上方?否则您的代码看起来正常我看不到任何问题输出是56e1ec5d4635a55403900d78。当我在mongo shell中使用此id时,我得到了我查询的内容。好的,您可能希望尝试将id强制转换为ObjectId,如:postedBy:mongoose.Types.ObjectId(req.params.lown_id)
将console.log(req.params.lown_id)添加到plant.find上方。输出是什么?如果这是您期望的id,请尝试从plant.find中删除postedBy:req.params.lown_id
({…
现在它应该从db返回所有内容。是吗?@Molda感谢您的即时回复。是的,它从我的db返回所有内容,但我只希望它返回特定于房东的数据。我该怎么做?只是想确保所有内容正常工作。您没有回答我的第一个问题tho,console.log的输出是什么(req.params.lown_id)放在plant.find上方?否则您的代码看起来正常我看不到任何问题输出是56e1ec5d4635a55403900d78。当我在mongo shell中使用此id时,我得到了我查询的内容。好的,您可能希望尝试将id强制转换为ObjectId,如:postedBy:mongoose.Types.ObjectId(req.params.lown_id)
Ok,它实际上也可以是字符串。但是您应该添加一个ref:postedBy:{type:mongoose.Schema.Types.ObjectId,ref:'User'}
Ok,它实际上也可以是字符串。但是您应该添加一个ref:postedBy:{type:mongoose.Schema.Types.ObjectId,ref:'User'}