Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用mongodb';s$和php格式_Php_Mongodb_Database - Fatal编程技术网

使用mongodb';s$和php格式

使用mongodb';s$和php格式,php,mongodb,database,Php,Mongodb,Database,安装,php+mongodb 数据库应包含多个项目,其中“Title”同时包含“Apple”和“Orange”。我试图只获取同时包含“苹果”和“橙色”的项目 $regexOne = new MongoRegex( '/Apple/i' ); $regexTwo = new MongoRegex('/Orange/i'); $cursor = $collection->find( array( '$and' => array( array('Title' => $

安装,php+mongodb

数据库应包含多个项目,其中“Title”同时包含“Apple”和“Orange”。我试图只获取同时包含“苹果”和“橙色”的项目

  $regexOne = new MongoRegex( '/Apple/i' ); 
  $regexTwo = new MongoRegex('/Orange/i');

  $cursor = $collection->find( array( '$and' => array( array('Title' => $regexOne), array('Title' => $regexTwo) ) ) );
将“$和”替换为“$或”的同一查询正常工作(或至少看起来正常),但尽管数据库中存在与这些条件匹配的数据,但这不会返回任何结果。

重复这一点,第一步只是将Mongo的shell与PHP进行比较。这两者是等效的:

$ mongo 
MongoDB shell version: 2.2.0-rc0
connecting to: test
> db.foo.drop()
true
> db.foo.insert({title:"apple"})
> db.foo.insert({title:"orange"})
> db.foo.insert({title:"apple orange"})
> db.foo.insert({title:"banana apple"})
> db.foo.insert({title:"banana plum"})
> db.foo.find({$and: [{title:/apple/i}, {title:/orange/i}]})
{ "_id" : ObjectId("501804c4e7dc9abd7b58cd83"), "title" : "apple orange" }
> db.foo.find({$or: [{title:/apple/i}, {title:/orange/i}]})
{ "_id" : ObjectId("501804bde7dc9abd7b58cd81"), "title" : "apple" }
{ "_id" : ObjectId("501804c0e7dc9abd7b58cd82"), "title" : "orange" }
{ "_id" : ObjectId("501804c4e7dc9abd7b58cd83"), "title" : "apple orange" }
{ "_id" : ObjectId("501804cce7dc9abd7b58cd84"), "title" : "banana apple" }
在PHP中(使用):

php>$c=(newmongo())->test->foo;
php>=迭代器数组($c->find(['$and'=>[['title'=>new MongoRegex('/apple/i')]),['title'=>new MongoRegex('/orange/i')]]))
排列(
“501804c4e7dc9abd7b58cd83”=>阵列(
“_id”=>{
$id=>“501804c4e7dc9abd7b58cd83”,
},
“标题”=>“苹果橙”,
),
)
php>=迭代器数组($c->find(['$or'=>[['title'=>new MongoRegex('/apple/i')],['title'=>new MongoRegex('/orange/i')]]))
排列(
“501804bde7dc9abd7b58cd81”=>阵列(
“_id”=>{
$id=>“501804bde7dc9abd7b58cd81”,
},
“标题”=>“苹果”,
),
“501804c0e7dc9abd7b58cd82”=>阵列(
“_id”=>{
$id=>“501804c0e7dc9abd7b58cd82”,
},
“标题”=>“橙色”,
),
“501804c4e7dc9abd7b58cd83”=>阵列(
“_id”=>{
$id=>“501804c4e7dc9abd7b58cd83”,
},
“标题”=>“苹果橙”,
),
“501804cce7dc9abd7b58cd84”=>阵列(
“_id”=>{
$id=>“501804cce7dc9abd7b58cd84”,
},
“标题”=>“香蕉苹果”,
),
)

如果直接在命令行而不是通过PHP对MongoDB运行此查询,会发生什么?您的标题暗示您认为这是一个PHP问题,但对我来说,您的问题听起来与PHP完全无关。因此,第一步是消除PHP作为变量的作用——如果您看到相同的行为直接与MongoDB对话,您就知道这是查询的问题,与PHP无关;如果您在命令行中得到了正确的结果,那么通过PHP驱动程序发送的内容就有点奇怪了。如果我的问题有误导性,很抱歉,我想我本可以更好地说明它(也许还添加了更多代码)。我成功地在mongo shell中提取了$和查询,但在将其转换为php mongo语法时遇到了问题。我已经找到了问题的原因,我使用的是mongodb的1.8版,现在已更新到最新版本,并且工作正常。
php> $c = (new Mongo())->test->foo;

php> =iterator_to_array($c->find(['$and' => [['title' => new MongoRegex('/apple/i')], ['title' => new MongoRegex('/orange/i')]]]))
array(
  "501804c4e7dc9abd7b58cd83" => array(
    "_id" => <object #10 of type MongoId> {
      $id => "501804c4e7dc9abd7b58cd83",
    },
    "title" => "apple orange",
  ),
)

php> =iterator_to_array($c->find(['$or' => [['title' => new MongoRegex('/apple/i')], ['title' => new MongoRegex('/orange/i')]]]))
array(
  "501804bde7dc9abd7b58cd81" => array(
    "_id" => <object #11 of type MongoId> {
      $id => "501804bde7dc9abd7b58cd81",
    },
    "title" => "apple",
  ),
  "501804c0e7dc9abd7b58cd82" => array(
    "_id" => <object #12 of type MongoId> {
      $id => "501804c0e7dc9abd7b58cd82",
    },
    "title" => "orange",
  ),
  "501804c4e7dc9abd7b58cd83" => array(
    "_id" => <object #13 of type MongoId> {
      $id => "501804c4e7dc9abd7b58cd83",
    },
    "title" => "apple orange",
  ),
  "501804cce7dc9abd7b58cd84" => array(
    "_id" => <object #14 of type MongoId> {
      $id => "501804cce7dc9abd7b58cd84",
    },
    "title" => "banana apple",
  ),
)