我在名为“ instruments”的数据库中为集合创建了Mongoose模式。我将其设置为非严格,因为要在其中插入的记录可能具有一定数量的未知的字段-值对。字段名称和值也是未知的。现在,无论包括什么新字段,它都能成功保存文档,但是当我尝试检索这些文档并使用JS点表示法引用内部的动态字段-值对时,却遇到了一个不确定的问题。我可以成功获取在模式中指定的字段的值,但是当我打印返回的整个文档时,我看到了要查找的字段-值对。这是自然的猫鼬行为吗?如果是,我该怎么做才能仍然获得不在架构中的字段?请参阅以下代码以供参考...
仪器架构
Name Clust1 Clust2 Clust3
BB 0.7694628 0.03241972 0.02935754
CC 0.1099033 0.52170750 0.28385905
示例查询
import java.util.ArrayList;
import java.util.List;
public class MyClass {
public static void allButLast(List<String> list)
{
List<String> set = new ArrayList<String>();
for (int k : list)
{
set.remove(0, -2);
}
return set;
}
现在的输出是:
{ _id: 5c9b3747407939296c5af1da, inpname: 'Nome', configs: { bfq: [ [Object] ], qpa: [ [Object] ], fmb: [ [Object] ], cz: [ [Object] ] } } 5c9b3747407939296c5af1da undefined undefined
我希望两个未定义的都是“ Nome”。
答案 0 :(得分:0)
对模式进行建模后,可以使用“ ref”进行引用
var subConfigsSchema = new Schema({
alias: String,
value: String,
position: Number
}, {_id: false});
var subConfigs = mongoose.model('SubConfig', subConfigsSchema);
var configsSchema = new Schema({
bfq: [subConfigsSchema],
qpa: [subConfigsSchema],
fmb: [subConfigsSchema],
cz: [subConfigsSchema]
}, {_id: false});
var config = mongoose.model('Config', ConfigsSchema);
var instrumentSchema = new Schema({
_id: {
type: Schema.Types.ObjectId,
ref: 'SubConfig',
required: true,
auto: true
},
configs: {
type: Schema.Types.ObjectId,
ref: 'Config',
required: true
}
},
{
strict: false,
versionKey: false
});
module.exports = mongoose.model('Instrument', instrumentSchema)
现在查询时,您需要填充参考模型。为此,您需要填充参考模型。
Instrument.find({}).populate('subconfig').populate('config').exec((err, data)=> {
if (err) throw err;
instrument = data[0];
console.log(instrument);
console.log(instrument._id);
console.log(instrument.inpname);
console.log(Instrument['inpname']);
});