Mongo finone在哪里条件和cond1或cond2

时间:2014-04-12 07:49:19

标签: mongodb

你如何在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));

3 个答案:

答案 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
  }]
})