标签: mongodb-php

MongoDB PHP使用带数组的$ in

我正在使用MongoDB和PHP,并尝试根据生成的数组执行$ in.

当我手动指定相同的数组时,它可以工作,但是当我构建它时,它会返回具有相同数据的任何结果.

我有我的东西:

$settings = array();
foreach($items as $item) {
   $settings[] = $item['id'];
}

//Settings is the same as this
$setting2 = array(1,2,3,4,5,6,7,8);

//This returns no results
$cursor = $collection->find(array('status' => 0, 'sid' => array('$in' => $settings)));


//This does return results
$cursor = $collection->find(array('status' => 0, 'sid' => array('$in' => $setting2)));
Run Code Online (Sandbox Code Playgroud)

我已经查过了

$ CURSOR->信息()

并且数组中的项目是相同的.

我有什么想法我做错了吗?

谢谢!

php mongodb mongodb-php

7
推荐指数
1
解决办法
1万
查看次数

使用Mongo Aggregation/Mongo聚合的性能可以做些什么

我构建了一个MongoDB.我想通过某些分组进行聚合.我找到了这个文件,它会为我做这件事.一切都很好,但指出了一些限制:

  1. 管道输出只能包含16兆字节.如果结果集超出此限制,则aggregate命令会产生错误.

  2. 如果任何单个聚合操作占用系统RAM的10%以上,则操作将产生错误.

  3. 聚合系统当前将$group操作存储在存储器中,这可能在处理大量组时引起问题.

我可以使用MongoDB聚合处理多少行/文档?我不敢用这个.任何人都可以指导我这个吗?

mongodb mongodb-php

7
推荐指数
1
解决办法
4897
查看次数

如何在Laravel Framework中使用MongoDB

我在使用带有Laravel框架的MongoDB时遇到了问题.我使用了这个Laravel-MongoDB

这是我得到的错误

在此输入图像描述

/app/model/User.php

<?php 

use Jenssegers\Mongodb\Model as Eloquent;

class User extends Eloquent {

     //protected $connection = 'mongodb';
     protected $collection = 'users';

     $user = User::all();

     public function all()
     {
        return $this->$user;
     }
}


?>
Run Code Online (Sandbox Code Playgroud)

/app/routes.php

Route::get('users', function()
{

    $users = User::all();   
    return View::make('users')->with('users',$users);

});
Run Code Online (Sandbox Code Playgroud)

/app/config/database.php

'mongodb' => array(
            'driver'   => 'mongodb',
            'host'     => 'localhost',
            'port'     => 27017,
            'username' => 'username',
            'password' => 'password',
            'database' => 'users'
        ),
Run Code Online (Sandbox Code Playgroud)

我不知道我的实施有什么问题.请帮帮我们..

mongodb-php laravel-4

7
推荐指数
1
解决办法
4万
查看次数

MongoDB使用150 MB内存是否理想?

这是我使用MongoDB的第一个项目.

我把它托管在一个linode(一个使用XEN的VPS)上,我用"top"检查内存使用情况.

mongod进程似乎使用大约150 MB的内存.我检查时与它没有联系.我使用RockMongo来管理它.我的主要数据库统计数据是 -

Size - 464m 
Storage Size - 83.99m
Data Size - 66.4m
Index Size - 49.33m
Collections - 5
Objects - 584850
Run Code Online (Sandbox Code Playgroud)

当cron作业运行时会发生很多查询,大约每分钟75次甚至更多.但是,正如我之前所说,当我检查内存使用情况时,没有连接.

输出 db.serverStatus();

注意 - 我在运行之前重新启动了mongod db.serverStatus();,内存使用量为40 MB.

{
   "retval": {
     "version": "1.6.5",
     "uptime": 790,
     "uptimeEstimate": 783,
     "localTime": "Mon, 07 Feb 2011 00: 51: 04 -0500",
     "globalLock": {
       "totalTime": 790027671,
       "lockTime": 376381,
       "ratio": 0.00047641495838188,
       "currentQueue": {
         "total": 0,
         "readers": 0,
         "writers": 0
      }
    },
     "mem": {
       "bits": 64,
       "resident": 38,
       "virtual": 957,
       "supported": …
Run Code Online (Sandbox Code Playgroud)

mongodb mongodb-php

6
推荐指数
2
解决办法
8240
查看次数

MongoDB - PHP - MongoCursorException'未找到游标'

我有2个集合:A(3.8M docs)和B(1.7M docs)

我有一个PHP脚本,我从shell运行:

  1. 循环遍历A中的每条记录
  2. ~60%的时间,它在B上执行findOne(使用_id)
  3. 做一些基本的数学,创建一个PHP数组

一旦完成了a中所有文档的循环:

4)循环遍历php数组

5)插入集合C

在(1)期间,我一直得到:PHP致命错误:未捕获异常'MongoCursorException',消息'找不到光标'最后处理的项目是#8187 of 3872494.

real    1m25.478s
user    0m0.076s
sys     0m0.064s
Run Code Online (Sandbox Code Playgroud)

再次运行它,代码没有变化,在项目#19826/3872495处引发了异常

real    3m19.144s
user    0m0.120s
sys     0m0.072s
Run Code Online (Sandbox Code Playgroud)

再次,#8181/387249

real    1m31.110s
user    0m0.036s
sys     0m0.048s
Run Code Online (Sandbox Code Playgroud)

是的,我意识到我可以(并且可能应该)捕获异常......但是......为什么它甚至被抛出?特别是在进入数据库的这种不同的经过时间/深度.

如果有帮助,我的设置是3节点副本集(2 + arb).我让二级离线并尝试了主要的运行.相同的结果(处理的结果数量和次数不同,但总是抛出Cursor Not Found异常).

php mongodb mongodb-php

6
推荐指数
1
解决办法
6750
查看次数

MongoCursorException'无法获取响应头'

我正在使用PHP和mongodb开发一个网站.我用PECL-mongo访问mongodb ,并且遇到了烦恼.我时不时地得到这样的错误(我已经对这些路径进行了匿名)

Fatal error: Uncaught exception 'MongoCursorException' with message 'couldn't get response header' in
    /PATH/index.php:38 Stack trace: #0 
    /PATH/index.php(38): MongoCursor->rewind() #1 
    /PATH/template.inc(29): get_sidebar() #2 
    /PATH/index.php(13): 
    require_once('PATH/...') #3 {main} thrown in PATH/index.php on line 38
Run Code Online (Sandbox Code Playgroud)

根据文档,这意味着:

驱动程序无法从数据库中获取回复标头,因此它放弃了.检查数据库是否仍在运行并且网络已连接,然后再次尝试查询.

但我知道数据库已启动,因为我在我自己的机器上本地执行环回.没有与外界联系.

再试一次经常有效.这可能是PHP的mongo驱动程序中的一个错误吗?这可能是一个"错误编译"的问题(我从源代码编译,但有非常良性的标志,-march=native -O2)?

谁看过这个吗?

搜索周围,我只看到一些愚蠢的Facebook游戏的引用有相同的错误.

编辑:我刚刚将我的PECL驱动程序降级到1.1.4版本,到目前为止,问题似乎已经消失.所以这可能只是1.2.x系列中的一个错误.如果有人能够对它有所了解,那就太好了.

编辑:我在这里没有做任何复杂的事情,有问题的代码看起来像这样:

$m = new Mongo();
$collection = $m->my_db->collection;
$results = $collection->find(array("favorite"=>true))->limit(5);
Run Code Online (Sandbox Code Playgroud)

php mongodb mongodb-php

6
推荐指数
1
解决办法
1661
查看次数

MongoDB - 是否可以通过关联数组键进行查询?

我需要存储一些基本上只是日期/整数的键值对数组的数据,其中日期将始终是唯一的.

我希望能够像关联数组一样存储它:

array(
    "2012-02-26" => 5,
    "2012-02-27" => 2,
    "2012-02-28" => 17,
    "2012-02-29" => 4
)
Run Code Online (Sandbox Code Playgroud)

但我还需要能够查询日期(即获取日期> 2012-02-27的所有内容),因此怀疑我需要使用更像的模式:

array(
    array("date"=>"2012-02-26", "value"=>5),
    array("date"=>"2012-02-27", "value"=>2),
    array("date"=>"2012-02-28", "value"=>17),
    array("date"=>"2012-02-29", "value"=>4),
)
Run Code Online (Sandbox Code Playgroud)

显然前者更清晰,更简洁,但我能否以我想要的方式查询它,如果没有,是否还有其他可能更合适的模式?

php mongodb mongodb-php

6
推荐指数
1
解决办法
3512
查看次数

MongoDB 2.6索引设置,使用$或$ in查询,带限制和排序

我有一个有点复杂的查询,这对我的应用程序非常关键.

$cur = $col->find(
    array (
        '$or' => array(
            array('owner' => $my_id),
            array('owner' => array('$in' => $friends), 'perm.type' => array('$in' => array('P', 'F'))),
            array('owner' => array('$in' => $friends), 'perm.list' => $my_id)
        )
    )
)->limit(10)->skip(0)->sort(array('ca' => -1));
Run Code Online (Sandbox Code Playgroud)

目的是找到前10个帖子,按照他们在desc顺序中的创建时间排序,这些帖子是:

一个).由我自己制作,或b).由我的朋友制作,允许类型为'P'供公众使用,或'F'供朋友使用,或c).由我的朋友制作,许可列表专门指定我作为观众.

变量$ friends是一组用户ID,他们是我的朋友.perm.type总共有4个值,分别是'P','F','S','C'.perm.list是一组有权查看此帖子的用户ID.

上述查询可用于过滤掉正确的结果.但是我遇到了在它们上创建有效索引的问题.

我为此查询创建的索引是:

$col->ensureIndex(array('owner' => 1, 'ca' => -1));
$col->ensureIndex(array('owner' => 1, 'perm.type' => 1, 'ca' => -1));
$col->ensureIndex(array('owner' => 1, 'perm.list' => 1, 'ca' => -1));
Run Code Online (Sandbox Code Playgroud)

第一个索引是针对查询条件的第一部分设计的,第二个索引是针对第二个条件设计的,第三个索引是针对第三个条件设计的,并且是多键索引.

一个典型的帖子看起来像这样:

{
    "_id": "...",
    "owner": "001",
    "perm": {
        "type": "P",
        "list": []
    }, …
Run Code Online (Sandbox Code Playgroud)

mongodb mongodb-php mongodb-query

6
推荐指数
1
解决办法
850
查看次数

无法在OS X 10.11上安装mongo-php-driver

我已经阅读了所有类似的Stack Overflow问题 - 没有解决我的具体问题.我正在运行OS X 10.11(El Capitan).

我克隆了mongo-php-drive repo,这些命令成功了:

phpize
./configure
make
Run Code Online (Sandbox Code Playgroud)

sudo make install失败了:

(master) ~/tmp/mongo-php-driver
$ sudo make install
Installing shared extensions:     /usr/lib/php/extensions/no-debug-non-zts-20121212/
cp: /usr/lib/php/extensions/no-debug-non-zts-20121212/#INST@39898#: Operation not permitted
make: *** [install-modules] Error 1
Run Code Online (Sandbox Code Playgroud)

我知道这是一个权限问题,但我不知道如何安全地修复它.我不想放松像这样的安全/usr/*.

任何建议将不胜感激.

php file-permissions mongodb mongodb-php osx-elcapitan

6
推荐指数
2
解决办法
6094
查看次数

Laravel:无法对​​有效负载进行 JSON 编码。错误代码:5

我正在开发 Laravel (v5.7) 应用程序,该应用程序将上传的 CSV(带有联系人)转换为数组,然后在调度作业类时将其作为参数传递。

以下是 CSV 文件的示例(支持的格式):

123456,Richard,Smith
654321,John,Doe
Run Code Online (Sandbox Code Playgroud)

上传 (CSV) 文件的处理方式如下:

123456,Richard,Smith
654321,John,Doe
Run Code Online (Sandbox Code Playgroud)
$file_path = $request->file_name->store('contacts');
$file = storage_path('app/' . $file_path);

$contactsIterator = $this->getContacts($file);

$contacts = iterator_to_array($contactsIterator); // Array of contacts from uploaded CSV file
Run Code Online (Sandbox Code Playgroud)

最后,$contacts数组被传递给一个被分派的作业:

ImportContacts::dispatch($contacts);
Run Code Online (Sandbox Code Playgroud)

这个作业类看起来像这样:

    protected function getContacts($file)
    {
        $f = fopen($file, 'r');

        while ($line = fgets($f))
        {
            $row = explode(",", $line);

            yield [
                'phone'     => !empty($row[0]) ? trim($row[0]) : '',
                'firstname' => !empty($row[1]) ? trim($row[1]) : '',
                'lastname'  => !empty($row[2]) ? trim($row[2]) …
Run Code Online (Sandbox Code Playgroud)

php csv mongodb-php laravel laravel-queue

6
推荐指数
1
解决办法
6116
查看次数