第一个查询返回具有匹配值的rigth表。从那些匹配的值中,我想查询其他表以获取所有信息
var query = { partition : req.params.partition }
PartitionFilter.find(query)
.then(partition => {
if (!partition)
return res.status(400).send({message : "Partition not found"})
var query = {
name : { $in : partition.filter }
}
Filter.find(query)
.then(filter => {
if (!filter)
return res.status(400).send({message : "Filter not found "})
return res.status(200).send(filter)
})
.catch(err =>{
return res.status(500).send(err)
})
})
.catch(err => {
return res.status(500).send(err)
})
这是过滤器的模式
'use strict';
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var filterSchema = new Schema({
description: {
type: String,
required: true,
},
name: {
type: String,
unique: true,
required: true,
},
duration: {
type: Number,
required: true
}
});
module.exports = mongoose.model('Filter', filterSchema);
'use strict';
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var partitionfilterSchema = new Schema({
filter: String,
partition: String
});
module.exports = mongoose.model('PartitionFilter', partitionfilterSchema);
它应该返回所有匹配过滤器的表,但是我得到一个空表
答案 0 :(得分:0)
好的,我想我知道如何解决您的问题。您的第一个查询返回一个PartitionFilters数组,因此,当您在第二个查询中引用partition.filter时,它是未定义的,因为partition是一个数组(您是否打印了第一个查询的结果和partition.filter的值?)。
您的第二个查询应类似于:
DBGeography
编辑:
尽管这可以解决您的问题,但我认为您可以通过不同的方式改进代码。
当查找查询返回数组时,建议您重命名返回为复数的变量(分区,过滤器...)。
如果您只想获得一个结果,则应该执行一次findOne,但在PartitionFilter的情况下,因为分区未定义为 唯一,同一分区可能会有多个结果 并且只会返回第一个。
如果由于要建立ManyToOne关系而未将其定义为唯一,并且有多个文档将 分区到过滤器,您应该做的是将partition定义为 唯一并作为数组过滤。
在任何情况下,都应按ID关联表(在这种情况下,partitionFilter.filter应该是ID或Filter ID数组)。 例如:
var query = {
name: { $in: partition.map(function(elem){ return elem.filter; }) }
}
您的代码可能类似于:
var partitionfilterSchema = new Schema({
partition: {
type: String,
unique: true,
required: true
},
filters: [{
type: mongoose.Schema.Types.ObjectId,
ref: 'Filter'
}]
});