mongodb - Mongoose:从混合类型中查找子文档并更新
问题描述
我想更新和删除子文档。文件结构如下,
{
"projectId": "12345-service-request",
"projectVersion": [{
"version":"1",
"localConfig": [{
"port": "3003",
"mongoURI": "mongodb://localhost:27017/serviceRequest",
"MQ": "RMQ",
"logLevel": "2",
"version": "1.1",
"created": "03-06-2018 03:11:00 PM",
"active": "N"
},
{
"port": "3004",
"mongoURI": "mongodb://localhost:27017/serviceRequest",
"MQ": "IMQ",
"logLevel": "1",
"version": "1.2",
"created": "07-06-2018 03:11:00 PM",
"active": "Y"
}]
}]
}
“localConfig”中的字段不一样,它们因项目而异。因此,我为此使用Schema.Types.Mixed创建了架构,如下所示,
const mongoose = require('mongoose');
mongoose.set('debug', true);
const Schema = mongoose.Schema;
const projectVersion = new Schema({
version: {type:String, required: true},
cloudParams: [String],
localConfig: [{type:Schema.Types.Mixed}] // Mixed Type schema
});
const projectConfig = new Schema({
projectId : {type:String, required: true},
projectVersion : [projectVersion]
});
module.exports = mongoose.model("ProjectConfig", projectConfig);
现在,我正在尝试使用条件查找子文档,
projectId = 12345-service-request and
projectVersion.localConfig.version = 1.2
而是返回完整的文件。使用查找子文档的代码$ and $elemMatch
,
let projectId = '12345-service-request';
let version = '1.2'
// Using $
ProjectConfig.findOne({'projectId' : projectId,'projectVersion.localConfig.version' : version },
{ 'projectVersion.$' : 1 }).exec(function(err,projectConfig){
console.log("Result : "+JSON.stringify(projectConfig));
});
和
ProjectConfig.find({'projectId' : projectId,'projectVersion.localConfig.version' : version } ,
{ 'projectVersion.localConfig' : { $elemMatch : { version : version } } }).exec(function(err,projectConfig){
console.log("Result : "+JSON.stringify(projectConfig));
});
我遗漏了一些东西,或者有没有其他方法可以从混合类型中找到子文档。
解决方案
推荐阅读
- javascript - 如果数组为空则显示消息
- python - Python dict显示键值列表选择其他键的唯一值
- python - 使用 Selenium 进行 Python 抓取
- amazon-web-services - SageMaker 多模型和 RandomCutForest
- python - scipy.optimize.newton 不接受“full_output”选项
- python - 模块化 python 管理页面
- java - Selenium - 如何多次将相同的产品添加到购物车
- hashicorp-vault - Hashicorp Vault:限制策略赋予用户创建策略的权限
- flutter - 如何创建可编辑的下拉按钮?
- javascript - 基于数据集填充点之间的渐变颜色作为热图的替代方法