对两个或更多集合的复杂搜索和可扩展查询

时间:2015-04-27 11:21:29

标签: node.js performance mongodb mongodb-query

我正在研究Node.js + mongodb应用程序,我的问题与我的数据库和查询的设计有关。首先,描述我的数据库结构。我在我的数据库中有两个集合用户和值。用户集合中的文档如下所示:

 {
        "_id" : 31450861,
        "first_name" : "Jon",
        "last_name" : "Doe",
        "sex" : 2,
        "bdate" : ISODate("1981-08-01T21:00:00Z"),
        "city" : {
                "id" : 282,
                "title" : "Minsk"
        },
        "country" : {
                "id" : 3,
                "title" : "Belarussia"
        },
        "photo_max" : "https://foto.ru/RnhOKp2YJE4.jpg",
        "relation" : 4,
        "interests" : "science",
        "music" : "pop",
        "lang" : "RU",
}

此集合中包含用户数据(语言,生日等)。 集合值中的文档如下所示:

{
    "_id" : ObjectId("548023e5c16f310c23b75075"),
    "userId" : "31450861", //reference to _id in users collection
    "group1" : {
        "value1" : 13,
        " value2" : 7,
        " value3" : 3,
        " value4" : 14,
        " value5" : 17
    },
    "group2" : {
        " value1" : 9,
        " value2" : 6,
        " value3" : 17,
        " value4" : 12,
        " value5" : 13
    }

所以我需要在这个数据库中搜索用户,其中包含来自这两个集合的大量参数(他们的值(来自集合值),性别,城市,语言等)。我没有将文档值嵌入到用户中,因为我对它们分别进行了大量查询(但可能是错误的设计,我需要帮助)。将来会有更多具有相似结构的集合,比如值(或者至少会引用userId),我必须将其包含在搜索查询中,并且我需要灵活性来扩展我对更多集合的查询。 所以我需要对这个集合运行复杂的查询(我知道mongodb中没有JOIN,所以我知道我必须查询两次或使用mapreduce)。

到目前为止,我对这个问题的看法(未在代码中测试过。)

我需要编写执行2个查询的搜索功能(以后会更多):

  1. 查找具有相同值并获取其ID的用户。

    var values = db.collection('values'); var ids = values.find({value1:1,value2:2,value3:3},{userId:1})//然后转换ids,使其成为带有userId的数组

  2. 然后在这个找到的集合中找到更多参数(性别,生日,语言等)的用户

    var users = db.collection('users'); users.find({$ and:[{_id:{$ in:ids}},{sex:2},{lang:“RU”}]});

  3. 我的问题是: 1.这是正常的方法还是在添加新的集合和查询时,我最终会遇到性能非常慢和代码混乱的问题? 2.如果是正常的,如何轻松地再向一个集合添加一个查询? 任何帮助,欢迎任何想法!提前谢谢!

0 个答案:

没有答案