我的用户数据库结构如下
{ _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的结构,但是现在改变过程需要时间。
任何解决方案?
答案 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}}]
它提供了我是创建者的项目列表,也是我作为团队成员的项目列表。