【问题标题】:how to get the right result from mongodb in php如何在 php 中从 mongodb 获得正确的结果
【发布时间】:2014-10-23 08:15:42
【问题描述】:

我有一个这样的对象:

$testData = array(
     'name' => 'joyCood',
     'nick' => 'hello',

     'friends' => array(
        array('friend_id' => 98, 'readable' => 8),
        array('friend_id' => 97, 'readable' => 0),
        array('friend_id' => 96, 'readable' => 0)
     ) 
);

我的查询sql是:

$macher = array('friends.friend_id' => 98, 'friends.readable' => 0);
$mongo->find($macher);

结果是:

$testData = array(
     'name' => 'joyCood',
     'nick' => 'hello',

     'friends' => array(
        array('friend_id' => 98, 'readable' => 8),
        array('friend_id' => 97, 'readable' => 0),
        array('friend_id' => 96, 'readable' => 0)
     ) 
);

问题是:可读的不是eq 0,为什么mongodb返回这个对象给我?正确的结果将是返回,一切都会好起来的。请帮帮我!

【问题讨论】:

  • "readable" 在文档数组中的几个元素中是 0,所以是的,这是一个匹配项。您实际上是在问数组内容的“无”在哪里具有“可读”0

标签: php mongodb mongodb-query


【解决方案1】:

我现在看到了。这里的问题是,您列出的条件是在 所有 数组成员中考虑的,而不仅仅是单个成员。为此,您需要$elemMatch

$macher = array( 'friends' => array( '$elemMatch' => array( 
    'friend_id' => 98, 'readable' => 0
)));

这认为每个元素都具有“相同”的查询条件。否则,数组中实际上存在匹配每个条件的元素“某处”,匹配为true

基本上是一个“小查询”,应用于数组的每个元素以查看两个条件是否为真。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-28
    • 1970-01-01
    • 1970-01-01
    • 2011-03-26
    相关资源
    最近更新 更多