是否可以有条件地指定查询返回的字段。这是我的用例:我有一个嵌套用户对话的对象,如下所示:
{
"_id" : "someId",
user_id: 'user1',
conversations:
[
{
user_id: 'user2',
comments:
[
{
user_id: 'user2',
text: 'Hi user1'
},
{
user_id: 'user1',
text: 'Hi user2'
},
]
},
{
user_id: 'user3',
comments:
[
{
user_id: 'user3',
text: 'Hi user1'
}
]
},
]
}
我想允许所有用户搜索和查看所有对象,但不能查看他们不拥有的对话。如下:
findObj = function(criteria, user, callback) {
Object.find({criteria}, {conversation:
{
if (user_id == user.id || conversations[].user_id = user.id) {1} else {0}
} }
);
}
先谢谢你的帮助, -Eric
答案 0 :(得分:0)
您可以获得所有涉及用户X的会话的用户:
db.users.find({$or:[{user_id: X}, {'conversations.user_id':x}]})
然而,这不会做你想要的。您遇到了架构问题。您必须从用户对象中删除对话并将其存储在专用集合中,该集合允许单独查询特定对话。