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

时间:2014-09-16 09:04:52

标签: node.js mongodb mongodb-query mongoskin

我有一个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});

由于

1 个答案:

答案 0 :(得分:0)

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

 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);

它将完全返回您想要的内容。