标签: mongodb-php

如何在php中查询mongo?

所以我有这个简单的登录功能,试图将电子邮件地址与数据库中的密码匹配,并通过表单将其与用户输入的数据进行比较.

function login($email, $password){
    $m = new Mongo("localhost"); 
    $m->connect();
    $db = $m->users;
    $collection = $db->test_collection;

    echo "<pre>";
    var_dump($collection->findOne(array('name' => 'john'))); //returns correctly
    var_dump($collection->find(array('name' => 'john'))); //returns mongo cursor object
    echo "</pre>";
}
Run Code Online (Sandbox Code Playgroud)

我不明白为什么find()只返回一个游标对象.答案?

这是mongo文档

array(5) {
  ["_id"]=>
  object(MongoId)#22 (1) {
    ["$id"]=>"4d7eaa848baf84d32b000000"
  }
  ["activated"]=> (true)
  ["email"]=> "john@smith.com"
  ["name"]=> "john"
  ["password"]=> "334c4a4c42fdb79d7ebc3e73b517e6f8"
}
Run Code Online (Sandbox Code Playgroud)

如何在同一文档中找到可以同时找到电子邮件和密码的"WHERE"查询?我显然没有得到find()和findOne()查询的参数.PHP中的正确语法是什么?

php mongodb mongodb-php

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

MongoDB在PHP中多个$和运算符查询

我使用PHP数组语法遇到了这个MongoDB查询的问题.这是我想要使用的查询的直接版本.

db.collection.find({
        $or: [
            {$and : [{X:1}, {X: {$gt: 100}}]},
            {$and : [{X:2}, {X: {$lt: 100}}]}
        ]
});
Run Code Online (Sandbox Code Playgroud)

注意:真正的查询更复杂,这只是一个例子.

我无法在PHP中找到一些描述此类查询的示例.我提出的最好的是:

$query = array(
    '$or' => array(
        array(
            '$and' => array(
                array('X' => 1),
                array('X' => array('gt' => 100))
            )
        ),
        array(
            '$and' => array(
                array('X' => 2),
                array('X' => array('lt' => 100))
            )
        ),
    )
);

$this->db->collection->find($query);
Run Code Online (Sandbox Code Playgroud)

但是这个查询不会返回任何结果.显然我们无法$and从数组中删除,因为我们不能在PHP数组中有重复的键.

我不想使用JavaScript表达式,因为速度至关重要.

更新:正如Alexander Azarov在评论中指出的那样,我的原始查询可以用不同的方式编写.我已使用正确使用的$and查询更新了问题 .

php mongodb mongodb-php

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

MongoDb替换文档并在不存在时插入

我希望在已存在的情况下替换文档,如果不存在,我希望将其插入.我怎么能在mongoDb中做到这一点?

我需要这样的东西,但在一个查询中:

find by a "where statement"
if exists, replace whole document
else, insert
Run Code Online (Sandbox Code Playgroud)

谢谢!

mongodb nosql mongodb-php

5
推荐指数
2
解决办法
4484
查看次数

PHP:序列化对象并将它们粘贴在数据库中供以后使用是不是很糟糕?

我正在计划和研究我从MySQL到MongoDB的转换,我只是有一个有趣的想法...我有一堆分层对象,我需要存储在数据库中.我目前的方法是在集合中包含一堆嵌入式文档.他们永远不需要被搜索.将序列化PHP对象,将它们粘贴在数据库中,然后在我想使用它们时将它们反序列化为PHP对象是否有意义?另一种方法是使用Doctrine作为我的ORM.

我的编程直觉告诉我这是一个糟糕的设计并且是有限的,但我觉得序列化和反序列化将非常快并且消除了对ORM的需求.

你怎么看?好的设计还是糟糕的设计?

php orm mongodb doctrine-orm mongodb-php

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

MongoDB GeoNear的结果除了距离以外的其他东西?

我正在开发一个PHP应用程序,我们需要在某个边界内检索结果,但是按结果的创建日期排序,而不是距离.我认为MongoDB的geoNear命令对此很有用,因为它负责计算每个结果的距离.但是,我想知道是否有一种方法可以通过create_date属性指定排序,而不是距离.理想情况下,我会创建坐标的复合键索引并创建日期,然后快速检索由创建日期排序的特定区域中的所有结果.

这可能,或者我必须在查询后进行排序吗?

sorting indexing geospatial mongodb mongodb-php

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

如何将机器ID /主机名映射/解映射到对象ID中的3个字节?

如何将机器ID /主机名映射/解映射到对象ID中的3个字节?

我应该在哪里寻找Linux中的机器ID?

domU-12-31-39-13-02-56看起来很奇怪,我不确定它是否正确?

<?php

$id = new MongoId('4f7351390c211d0a3d000004');

print_r($id->getHostname());

//domU-12-31-39-13-02-56

?>
Run Code Online (Sandbox Code Playgroud)

mongodb mongodb-php

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

从mongodb删除许多文件

我从事多租户网络应用程序.有必要清楚一些用户容器,它们可能相当大,收集了许多文档.我需要能够删除许多类似的文档:

    return self::remove(array('LISTID' => $listId), array('safe' => true));
Run Code Online (Sandbox Code Playgroud)

在某些情况下,可能有许多文档符合此标准,例如数千甚至数百万.我担心这个操作可能需要很长时间并节省服务器.如果有很多文档,是否值得将这样的操作排队等离线删除它们像伪代码:

while (there are documents) {
  delete(1000 documents);
  sleep();
}
Run Code Online (Sandbox Code Playgroud)

我想知道在这种情况下如何通过mongodb中较小的portios删除数据.我还注意到由于某些原因在mongodb中删除相当多的行发生得相当快,我们有在mongodb中存储数据的原型,在mysql中删除相似数量的行需要更长的时间,但在mysql中,表中的每一行都引用了其他表有了数据,但即使没有依赖表中的记录,在mongodb中看起来要快得多,在mongodb中它将所有数据存储在文档中,但无论如何我觉得相当奇怪.或者它可能是多余的?

谢谢.

php mongodb mongodb-php

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

使用MongoDB中的投影查询PHP语法?

什么是PHP语法将执行以下mongodb Shell的工作?

> db.SoManySins.find({},{"_id":0,"FactoryCapacity":1})
Run Code Online (Sandbox Code Playgroud)

mongodb mongodb-php

4
推荐指数
2
解决办法
6719
查看次数

Mongodb日期关闭1小时

我在ubuntu服务器上运行mongodb.服务器时间是

root# date
Thu Sep 13 21:15:58 BST 2012
Run Code Online (Sandbox Code Playgroud)

但是当我运行以下命令时,我得到了不同的结果

root# mongo
MongoDB shell version: 2.2.0
connecting to: test
> new Date()
ISODate("2012-09-13T20:15:58.670Z")
Run Code Online (Sandbox Code Playgroud)

只有一个小时的差异.当我updated_on使用php 更新文档字段时MongoDate(),该字段的值仍然是1小时关闭.

[编辑]其实我刚检查了我的php错误日志,日志文件中的时间也是1小时

[13-Sep-2012 20:11:14 UTC] Log Message (Time should be 21:11:14)
Run Code Online (Sandbox Code Playgroud)

mongodb mongodb-php

3
推荐指数
1
解决办法
4135
查看次数

使用正则表达式查找MongoDB + PHP

我正在尝试find使用MongoRegex对MongoDB集合执行PHP ,但我无法使其工作.代码很简单:

$cursor = $this->collection->find($params)
//$params has this value:
//Array
//(
//    [name] => MongoRegex Object
//    (
//       [regex] => .*victor.*
//       [flags] => i
//    )
//    [login] => MongoRegex Object
//    (
//        [regex] => .*victor.*
//        [flags] => i
//    )
//)
Run Code Online (Sandbox Code Playgroud)

这个$params数组是用这个函数构造的:

function toRegEx($entryVars=array()){
    $regexVars = array();
    foreach($entryVars as $var => $value){
        $regexVal = html_entity_decode($value);
        $regexVars[$var] = new MongoRegex("/.*".$regexVal.".*/i");
    }
    return $regexVars;
}
Run Code Online (Sandbox Code Playgroud)

出于某种原因,此查询仅返回完全匹配的值(即登录名或名称正好为"胜利者"的文档).我想要的是查询返回登录名和/或名称包含单词"victor"的所有文档.我很确定我遗漏了一些基本的东西,但我无法找到它.任何帮助表示赞赏.谢谢!

php regex mongodb mongodb-php

3
推荐指数
1
解决办法
1299
查看次数

标签 统计

mongodb ×10

mongodb-php ×10

php ×5

doctrine-orm ×1

geospatial ×1

indexing ×1

nosql ×1

orm ×1

regex ×1

sorting ×1