你如何在mongodb中做这个简单的选择?
Select *
From messages
Where id = $id
And
(
user_id = $user->_id
Or
from_user_id = $user->_id
)
这就是我到目前为止......
$msg = Message::model()->findOne(array('_id' => new MongoId($id), 'user_id' => $user->_id));
答案 0 :(得分:1)
您需要的mongo查询如下所示:
findOne({
_id: id,
$or: [
{ user_id: userId },
{ from_user_id: userId }
]
})
您似乎正在使用PHP,在这种情况下,它看起来像:
Message::model()->findOne(array(
'_id' => new MongoId($id),
'$or' => [
array('user_id' => $user->_id),
array('from_user_id' => $user->_id)
]));
我不熟悉PHP的数组语法,但我认为它是[...]
。如果没有,请适当更改$or
值 - 它必须是包含两个关联数组的数组,就像上面的原始Mongo查询一样。
答案 1 :(得分:1)
由于您的观点很清楚,除非另有说明,否则MongoDB中的所有查询条件都隐式为“AND”条件。所以在这里你将它与明确的$or
结合起来。
db.collection.findOne({
"_id": id,
"$or": [
"user_id": userId,
"from_user_id": userId
]
})
要么返回消息,要么不返回任何内容
答案 2 :(得分:1)
你需要$or声明(其他一切都默认为and
)
db.messages.findOne({
'_id': id,
'$or': [{
'user_id': userId
}, {
'from_user_id': userId
}]
})