我在Sails v1.0和mongodb中遇到两个问题。
我收到此警告:
警告:尝试使用指定的子条件填充“ matched_radios”, 但这可能并不安全,具体取决于模型中存储的记录数。 由于此关联不支持优化的填充(即,它跨越多个 数据存储,或使用不支持本机联接的适配器),这不是一个好方法 将其与使用`limit`,`skip`和/或`sort`的子标准一起填充的想法- 至少不在生产环境中。 这是因为,为了满足指定的`limit` /`skip` /`sort`,许多额外的记录 可能需要在此过程中获取-可能其中的足够数量会导致服务器上的RAM溢出。 如果您只是在开发过程中使用sails-disk,或者可以确定这不是问题 根据您应用程序的要求,您可以放心地忽略此消息。 但是要解决此问题,请(A)删除或更改此子标准和方法 此查询以其他方式(例如多个单独的查询或本机查询)进行,或 (B)将所有涉及的模型配置为使用相同的数据存储,和/或切换到适配器 像支持本地联接的sails-mysql或sails-postgresql。 [?]请参阅https://sailsjs.com/support以获得帮助。
我的代码如下:
Radio.find({limit: 3, sort: 'priority DESC'})
.where({enabled:true})
.populate('streams').populate('matched_radios')
Radio对象如下:
var Radio = {
attributes: {
name:{
type:'string',
defaultsTo:''
},
streams:{
collection:'stream',
via:'radios'
},
matched_radios:{
collection:'radio',
}
},
};
我还尝试过更改代码,使两个查询分开,如下所示:
var populatedPromise = []
Radio.find({limit: 3, sort: 'priority DESC'})
.where({enabled:true}).
then((radios)=>{
radios.forEach(radio => {
populatedPromise.push(Radio.findOne({id:radio.id}).populate('streams').populate('matched_radios'))
}
})
return Promise.all(populatedPromise);
但是我在Production上仍然有相同的警告日志。
第二个问题是具有1gb的服务器在一个小时内内存不足,并且可能与第一个问题有关(但可能不是)。 我们的生产用户数量在15至2万之间,大部分要求是“查找收音机”
有什么想法吗?