实时搜索: mongodb怎么用

mongodb怎么用

311条评论 6560人喜欢 5833次阅读 226人点赞
...

mongodb的msi安装包怎么用: MongoDB是一款可扩展、高性能的开源文档(Document-Oriented)数据库。 景安快云刚上MongoDB,公测期间,免费申请,操作起来也很简单。

mongodb 启动后怎么使用: 1:log一定要指定一个xxx.log文件(文件不存在也要这么写,会自动创建,写成这样是不可以的--logpath d:\mongodb\logs)
2:serviceName的N字母要大写

注意:这条命令要到MongoDB的bin目录下运行,刚开始的时候,我就直接在D:\下运行,结果服务的可执行目录为【"D:\mongod" --logpath "D:\MongoDB\logs\MongoDB.log" --logappend --dbpath "D:\MongoDB\data" --directoryperdb --service 】,肯定是不对的。

该命令行指定了日志文件:E:\APMServ5.2.6\MongoDb\logs\MongoDB.log,日志是以追加的方式输出的;
数据文件目录:E:\APMServ5.2.6\MongoDb\data,并且参数--directoryperdb说明每个DB都会新建一个目录;

Windows服务的名称:MongoDB;
以上的三个参数都是可以根据自己的情况而定的,呵呵。
最后是安装参数:--install,与之相对的是--remove

启动MongoDB:net start MongoDB
停止MongoDB:net stop MongoDB
删除MongoDB:sc delete MongoDB

运行→regedit→注册表编辑器→HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services 下面显示的就是所安装的服务项,删除相应的就好
mongod --logpath E:\APMServ5.2.6\MongoDb\logs\MongoDB.log --logappend --dbpath E:\APMServ5.2.6\MongoDb\data --directoryperdb --serviceName MongoDB --install

mongodb 何时使用索引,使用怎么样的索引: mongodb索引可以建立多个。
不同的查询最终只会匹配一个最适合的索引。

怎么连接 mongodb3.2: 表标PHP已经自带了mongo功能,你就可以操作下面的代码(但是你必须有安装mongodb服务器)
一、连接数据库

使用下面的代码创建一个数据库链接

复制代码 代码如下:
<?php
$connection = new Mongo(mongodb://192.168.1.5:27017); //链接到 192.168.1.5:27017//27017端口是默认的。
$connection = new Mongo( "example.com" ); //链接到远程主机(默认端口)
$connection = new Mongo( "example.com:65432" ); //链接到远程主机的自定义的端口
print_r($connection->listDBs());//能打印出数据库数组,看看有几个数据库。

?>
如图:

上图说有一个数据库名字叫local,总大小1个字节,他是空的。看见ok表示运行成功。

现在你可以使用$connection链接来操作数据库了

选择数据库

使用下面的代码来选择一个数据库

复制代码 代码如下:
<?php
$db = $connection->dbname;
?>

这里的数据库并不一定是一个已经存在的数据库,如果所选择的数据库不存在,则会新建一个数据库,所以在选择数据库的时候,注意一定要填上正确的数据库名
如果拼写错误的话,很有可能会新建一个数据库

复制代码 代码如下:
<?php
$db = $connection->mybiglongdbname;
//做一些事情
$db = $connection->mybiglongdbnme;
//现在会连上一个新的数据库
?>

获取一个集合

获取一个集合跟选择数据库拥有相同的语法格式

复制代码 代码如下:
<?php
$db = $connection->baz;//选择数据库
$collection = $db->foobar;//选择foobar集合
//或者使用更简洁的方式
$collection = $connection->baz->foobar;
?>

插入一个文档

多维数组是可以被储存到数据库中的基本单元
一个随机的文档可能是这样

复制代码 代码如下:
<?php
$doc = array(
”name” => “MongoDB”,
“type” => “database”,
“count” => 1,
“info” => (object)array( “x” => 203,
“y” => 102),
“versions” => array(“0.9.7″, “0.9.8″, “0.9.9″)
);
?>

注意:你可以嵌套数组与对象,对象与文档在mongodb中几乎是一样的,你可以使用$doc调用一个文档或对象,但是info字段总是一个对象而不是一个文档,
本约束适用于所有文档
使用MongoCollection::insert()插入一个文档

复制代码 代码如下:
<?php
$m = new Mongo();
$collection = $m->foo->bar;
$collection->insert($doc);
?>

mongodb 的 insert()、save() ,区别主要是:若存在主键,insert() 不做操作,而save() 则更改原来的内容为新内容。
存在数据: { _id : 1, " name " : " n1 " }
insert({ _id : 1, " name " : " n2 " }) 会提示错误
save({ _id : 1, " name " : " n2 " }) 会把 n1 改为 n2 。

使用MongoCollection::findOne()查询文档

为了证明上面那段代码的数据已经插入到数据库里了,我们进行简单的 findOne()操作以得到集合中的第一个文档数据,这种方法只返回一个文档数据,
这种方法适用于在你的查询语句的时候只匹配一个文档或者你只关心第一条数据

复制代码 代码如下:
<?php
$obj = $collection->findOne();
var_dump( $obj );
?>

你会看到下列结果

复制代码 代码如下:
array(5) {
["_id"]=>
object(MongoId)#6 (0) {
}
["name"]
string(7) “MongoDB”
["type"]=>
string(8) “database”
["count"]=>
int(1)
["info"]=>
array (2) {
["x"]=>
int(203)
["y"]=>
int(102)
}
["versions"]
array(3) {
[0]=>
string(5) “0.9.7″
[1]=>
string(5) “0.9.8″
[2]=>
string(5) “0.9.9″
}
}

注意_id字段自动加载了文档上,MongoDB储存元素中以_以及$开头的都是供内部使用的
添加更多文档

为了做一些更有趣的事情,我们添加更多简单的文档到集合中,这些文档如下

复制代码 代码如下:
<?php
array( “i” => value );
?>

我们可以使用循环相当有效的插入数据

复制代码 代码如下:
<?php
for($i=0; $i<100; $i++) {
$collection->insert( array( “i” => $i ) );
}
?>

注意:我们可以插入不同的字段在同一字符集中,在这方面意味着MongoDB拥有非常自由的储存模式

在一个集合中计算文档的数量

现在我们插入了101个文档(我们用循环插入了100个,之前还插入了一个),我们可以使用count()来看看我们的数据是不是都被插入进去了

复制代码 代码如下:

<?php
echo $collection->count();
?>

这段代码将打印出101
MongoCollection::count() 也可以查询字段数据

使用游标得到集合中的所有文档

为了得到集合中的所有文档,我们可以使用 MongoCollection::find()方法,find()方法返回一个 MongoCursor对象,可以让我们重复得到查询所匹配的的文档

复制代码 代码如下:
<?php
$cursor = $collection->find();
foreach ($cursor as $id => $value) {
echo “$id: “;
var_dump( $value );
}
?>

这样我们会打印出集合中的这101个文档,$id就是文档中的_id字段,$value 就是文档本身
为查询规定一个标准
我们可以通过find()方法得到集合中的文档子集,例如,我们要查询出集合中i字段为71的文档,我们可以使用下列方法

复制代码 代码如下:
<?php
$query = array( “i” => 71 );
$cursor = $collection->find( $query );
while( $cursor->hasNext() ) {
var_dump( $cursor->getNext() );
}
?>

我们将打印如下数据

复制代码 代码如下:
array(2) {
["_id"]=>
object(MongoId)#6 (0) {
}
["i"]=>
int(71)
["_ns"]=>
“testCollection”
}

为查询设定一个范围

我们可以通过find()创建一个查询语句以得集合中的一个子集,例如如果我们得到所有”i”>50的文档,我们可以使用如下代码

复制代码 代码如下:
<?php
$query = array( “i” => array(‘$gt' =>50)); //注意'$gt'两边的单引号
$cursor = $coll->find( $query );
while( $cursor->hasNext() ) {
var_dump( $cursor->getNext() );
}
?>

我们同样可以得到20 < i <= 30之间的数据

复制代码 代码如下:
<?php
$query = array( “i” => array( “\$gt” => 20, “\$lte” => 30 ) );
$cursor = $coll->find( $query );
while( $cursor->hasNext() ) {
var_dump( $cursor->getNext() );
}
?>

我们非常容易漏掉$美元符号,你也可以选择你自定义的符号来代替美元符号,选择一个不会在你的建里面出现的符号例如”:”,在php.ini中加上这么一句话

复制代码 代码如下:
mongo.cmd = “:”

那么上面的代码就可以替换成

复制代码 代码如下:
<?php
$query = array( “i” => array( “:gt” => 20, “:lte” => 30 ) );
?>

当然你也可以使用ini_set(“mongo.cmd”, “:”)的方法来改变
创建一个索引

MongoDB支持索引,并且可以很容易的加到一个集合中,你只要指定某个字段为索引就行了,并且还可以指定 正序索引(1)与 倒序索引(-1)
下面的代码为I创建了索引

复制代码 代码如下:
<?php
$coll->ensureIndex( array( “i” => 1 ) ); //在”i”上创建了一个索引
$coll->ensureIndex( array( “i” => -1, “j” => 1 ) );//在”i”上创建了倒序索引 在”j”上创建了正序索引
?>

一个完整的简单例子

这个例子展示了如何链接mongodb数据库,如何选择数据库,如何插入数据,如何查询数据,以及关闭数据库链接

复制代码 代码如下:
<?php
//链接
$m = new Mongo();
// 选择一个数据库
$db = $m->comedy;
$collection = $db->cartoons;

//添加一个元素
$obj = array( "title" => "Calvin and Hobbes", "author" => "Bill Watterson" );
$collection->insert($obj);

//修改
$newdata = array('$set' => array("title" => "Calvin and Hobbes"));
$collection->update(array("author" => "caleng"), $newdata);
//删除
$collection->remove(array('author'=>'caleng'), array("justOne" => true));

//添加另一个元素,使用不同的格式
$obj = array( "title" => "XKCD", "online" => true );
$collection->insert($obj);

//查询所有的集合
$cursor = $collection->find();

//重复显示结果
foreach ($cursor as $obj) {
echo $obj["title"] . "\n";
}

// 关闭链接
$m->close();
?>

输出结果为

复制代码 代码如下:
Calvin and Hobbes
XKCD

请教怎么在node中使用mongodb的连接池: 使用node-mongodb-native,这是官方为nodejs提供的驱
动。这个库本本身就实现了pool管理,所以不用另外考虑连接池。使用上可以通过配置链接url或server的属性设置连接池大小。可以在程序初始化时
创建一个全局的访问client,也可以自己再封装一次。所有通过这个client的发出的mongo操作请求,驱动底层都会自动分配链接。由于底层是用
c/c++实现的,所以不用担心代码会阻塞。具体如何创建可以参见http://mongodb.github.io/node-mongodb-native/driver-articles/mongoclient.html#mongoclient-connect

仅供参考~

mongoDB中如何使用max求最大值: 你可以写一个js的脚本就行了,比如按照下面的方式来写。

var cursor = db.collection.find();
while (cursor.hasNext()) {
...obj = cursor.next();
...//do max
}

或者,你也可以写一个MapReduce。

如何使用mongodbmanagerfree: hibernate好像还不能持久化对象到mongoDB中吧,不过可以使用其他框架替代hibernate。 目前我知道的有两种,1,如果你的jdk是1.6以上spring是3.0以上可以使用spring data项目中的mongodb部分来实现。2.如果不符合以上要求可以用morphia,也很不错...

如何用python在mongodb中创建数据库: 如果想创建一个数据库名称 <mydb>, 那么 use DATABASE 语句如下:
>use mydb
switched to db mydb

要检查当前选择的数据库使用命令 db

  • mc如何删

    难受英文怎么读: 难受的英文是:feel unwell.音标:英 [fi:l ʌnˈwel]   美 [fil ʌnˈwɛl]  双语例句1、When you feel unwell, you can describe how you...

    821条评论 4879人喜欢 4144次阅读 544人点赞
  • 2013是什么生肖年

    ASP.net怎样用代码实现区分国家: 这个由于IP地址获取不准确而且不同国家有不同的语言需求,建议你用一个下拉列表选择字体的方式来实现多国需求,因为IP不一定准确,而获取OS语言的话,一个西班牙人也可能用的是WINDOWS的英文系统,并不能做到和实际需求...

    793条评论 6180人喜欢 1463次阅读 522人点赞