我在db中有以下结构的文件
{
"_id" : ObjectId("5cfcd787cbac8d69e6db1a8"),
"__v" : 0,
"summary" : {
"Boundry" : false,
"Six" : false,
"Wicket" : false,
}
}
我想根据摘要(即边界,六和小门)查找数据
我能够通过使用“点”运算符来获取数据,即
db.getCollection('colection_name').find({"summary.Boundry": true})
但是我希望它是动态的,以便可以通过多个摘要键找到数据
Boundry的动态含义是通过“ summary.Boundry”查找数据:是的,对于六个,我需要通过“ summary.Six”查找数据:true我想使“ summary。+”。“ Six”类型的字符串它可以动态搜索吗?
我尝试过ElemMatch进行查询,但它似乎只能在数组中使用
预先感谢
答案 0 :(得分:1)
您可能需要详细说明“动态”的含义,但是,如果您只想同时匹配一个或多个字段,则可以包括以下内容:
db.getcollection('collection_name')
.find(
{ 'summary.Boundry': true },
{ 'summary.Six': true }
)
答案 1 :(得分:1)
您可以使用对象,并根据您的条件使其动态化
var search={};
if (yourcondition) {
search = {"summary.Boundry":true};
}else if (next condition) {
search = {"summary.Six":true};
}else if (next condition) {
search = {"summary.Wicket":true};
}
答案 2 :(得分:1)
您的问题仍然没有很好地形成,但是我从您的问题中得到了什么,您不愿意像
这样的硬代码查询db.getCollection('colection_name').find({"summary.Boundry": true})
所以我的建议是您可以动态创建查询对象,例如 示例1:如果您需要所有边界,则
query({"summary.Boundry": true}, {}, {}, function(err, res)=> { // Your further code});
示例2:如果要全部六个,则
query({"summary.Six": true}, {}, {}, function(err, res)=> { // Your further code});
查询功能的实现就像(我添加了项目和选项,以防万一您还没有文档的全部键)
function query(condition, projection, options, callback){
db.getCollection('colection_name').find(condition, projection, options, callback)
}
希望我能解决你的问题。