Mongo,使用数组查询集合 [英] Mongo, query a collection with a array

查看:97
本文介绍了Mongo,使用数组查询集合的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个叫做organization的大学:

I have this colleciton called organization:

[
  {
    "_id": "53a58a02f1001e7fd28f5aec",
    "orgId": 5,
    "title": "Org A",
    "members": [
      {
        "tier": 1,
        "user": "53a58a02f1001e7fd28f5ae8"
      },
      {
        "tier": 2,
        "user": "53a58a02f1001e7fd28f5ae9"
      },
      {
        "tier": 3,
        "user": "53a58a02f1001e7fd28f5aea"
      }
    ]
  },
  {
    "_id": "53a58a02f1001e7fd28f5aed",
    "orgId": 6,
    "title": "Org B",
    "members": [
      {
        "tier": 1,
        "user": "53a58a02f1001e7fd28f5ae9"
      },
      {
        "tier": 3,
        "user": "53a58a02f1001e7fd28f5aea"
      }
    ]
  }
]

我想运行一个查询,该查询返回给定用户所属的所有组织.

I want to run a query which returns all organizations that a given user is a member of.

我尝试过:

mongoose.model('organization').find({}, function(err, organizations){
    var usersOrganization = [];

    for(var i=0;i<organizations.length;i++){
      for(var f = 0;f<organizations[i].members.length;f++){
        if(String(organizations[i].members[f].user) === user){
          usersOrganization.push(organizations[i]);
        }
      }
    }

    callback.send(200, usersOrganization);
  })

首先获取所有组织,然后遍历它们和所有成员.将成员与给定的用户匹配,并将其推入数组.

First get all organizations then loop through them and all members. Match the members with the given user and push it in to an array.

它可以工作,但是我想知道是否有任何智能查询可以使它更漂亮?

It works, but I wonder if there is any smart query to do this more pretty?

推荐答案

您可以使用点符号与数组中的字段进行匹配,因此可以将查询简化为:

You can match against fields within an array using dot-notation, so you can simplify your query to:

mongoose.model('organization')
    .find({'members.user': user}, function(err, usersOrganizations){
        callback.send(200, usersOrganization);
    }
);

这篇关于Mongo,使用数组查询集合的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆