Mongodb查询如何通过记录创建或与记录关联

时间:2014-07-04 12:57:31

标签: mongodb

我的用户数据库结构如下

    {   _id:123,   fname:Name,   
        projects:[
          {projectid:123,
           createdby:123}   
        ]
    }
    {   _id:456,   fname:Name,   
        projects:[
          {projectid:789,
           createdby:456,
           teammembers:[{memberid:123},{memberid:654}]
          }
        ]
    }

我正在尝试获取项目列表,其中我是创建者或我是团队成员之一。我已经完成了以下查询

db.user.find({"$or":[{"projects.teammembers.memberid":"123"},{"projects.createdby":"123"}],{projects:1})

此查询为我提供了我不是其成员的项目。 如果我将列限制作为

  

项目$ MEMBERID:1

mongo抛出此错误。

  

"位置运算符与查询说明符不匹配。"

我知道通过改变projects.teammembers到array的结构,但是现在改变过程需要时间。

任何解决方案?

2 个答案:

答案 0 :(得分:0)

您正尝试在" 2级数组"上执行查询。这就是你得到的原因:

projects.$.memberid:1

因此,您必须使用$ proection运算符,以便"在自己的表中搜索每个表值"。

尝试

db.user.find({"$or":[{"projects.teammembers.$.memberid":"123"},{"projects.createdby":"123"}],{projects:1})

或者查看此文档:Projection doc

抱歉我的英文

答案 1 :(得分:0)

我能够使用aggregate命令解决问题。 这就是我做的事情

collection.aggregate([{"$unwind":"$projects"},
{"$match":{"$or":[{"projects.createdby":"user1"},
{"projects.teammembers.memberid":"user1"}]}},
{"$project":{"projects":1}}]

它提供了我是创建者的项目列表,也是我作为团队成员的项目列表。