繁体   English   中英

如何在mongodb投影查询中的项目之间或之间放置数组?

[英]How to put an array with or between items in mongodb projection query?

我有一个mongodb数据库,该数据库以以下格式存储项目:

{
"2013" : {
    "2" : {
        "1" : {
            "item1" : {
                "1" : {
                    "a_type" : 10,
                    "b_type" : 5,
                }
            },
            "item2" : {
                "v1" : {
                    "a_type" : 10,
                    "b_type" : 5,
                }
            },
        },
        "3" : {
            "item1" : {
                "1" : {
                    "a_type" : 10,
                    "b_type" : 5
                },
                "3" : {
                    "a_type" : 10,
                    "b_type" : 5
                }
            },
            "item2" : {
                "v1" : {
                    "a_type" : 10,
                    "b_type" : 5
                }
            },
        }
    }
}
"2014" : {
    "1" : {
        "5" : {
            "item1" : {
                "1" : {
                    "a_type" : 10,
                    "b_type" : 5
                }
            },
            "item2" : {
                "v2" : {
                    "a_type" : 10,
                    "b_type" : 5
                }
            },
        },     
    },
}
"_id" : ObjectId("53b82417a4b4939c27e300ed")
}

我想在查询的特定日期获得一些特定的项目数据。 我可以用硬编码完成一天或更长时间,但是我想给它一个数组,该数组将自动填充特定的日期和项目名称,但是在堆栈和mongo文档中搜索超过一天后,我找不到任何东西。 请帮我解决一下这个。 查询获取一个特定的项目和日期是这样的:

db.collection(collectionName).findOne({}, {'2013.2.1.item1': 1, '2014.1.5.item2': 1},  function(err, res});

谢谢

想象一下,包含查询项的数组是:

 var query = ['2013.2.1', '2014.1.5'];

由于您的数据库结构,您必须使用MongoDB投影来提取查询项,因此您应该执行以下操作

var projectionObj = {};
for(var item in query) {
    projectionObj[item] = 1;
}

它将产生波纹管对象:

{
    '2013.2.1': 1,
    '2014.1.5': 1
}

然后,您可以将其传递给MongoDB find函数,如下所示:

db.collection([collectionName]).find({}, projectionObj);

它将完全返回您想要的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM