我正在使用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->信息()
并且数组中的项目是相同的.
我有什么想法我做错了吗?
谢谢!
我在使用带有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的第一个项目.
我把它托管在一个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) 我有2个集合:A(3.8M docs)和B(1.7M docs)
我有一个PHP脚本,我从shell运行:
一旦完成了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开发一个网站.我用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) 我需要存储一些基本上只是日期/整数的键值对数组的数据,其中日期将始终是唯一的.
我希望能够像关联数组一样存储它:
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)
显然前者更清晰,更简洁,但我能否以我想要的方式查询它,如果没有,是否还有其他可能更合适的模式?
我有一个有点复杂的查询,这对我的应用程序非常关键.
$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) 我已经阅读了所有类似的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/*.
任何建议将不胜感激.
我正在开发 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)