﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-八叶草(徐怀移)-随笔分类-mongodb</title><link>http://www.cppblog.com/byc/category/17306.html</link><description>学习资料记录</description><language>zh-cn</language><lastBuildDate>Wed, 19 Oct 2011 07:15:37 GMT</lastBuildDate><pubDate>Wed, 19 Oct 2011 07:15:37 GMT</pubDate><ttl>60</ttl><item><title>mongo shell</title><link>http://www.cppblog.com/byc/archive/2011/08/19/153842.html</link><dc:creator>八叶草</dc:creator><author>八叶草</author><pubDate>Fri, 19 Aug 2011 03:41:00 GMT</pubDate><guid>http://www.cppblog.com/byc/archive/2011/08/19/153842.html</guid><wfw:comment>http://www.cppblog.com/byc/comments/153842.html</wfw:comment><comments>http://www.cppblog.com/byc/archive/2011/08/19/153842.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/byc/comments/commentRss/153842.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/byc/services/trackbacks/153842.html</trackback:ping><description><![CDATA[<div>1 查看doc文档转为BSON的大小(以字节为单位),在shell中运行 Object.bsonsize(doc)<br />2 数组定位器 有两种方法操作数组中的值：通过位置或者定位操作符("$") db.test.find("a.0":value) db.test.update({},{$set:{"arrat.$":value}})<br />3 upsert是一种特殊的更新。要是没有文档符合更新条件，就会以这个条件和更新文档为基础创建一个新的文档。如果找到了匹配的文档，则正常更新。<br />4&nbsp;save是一个shell函数,可以在文档不存在是插入，存在时更新。它只有一个参数：文档。要是这个文档含有_id键,save会调用upsert，否则，会调用插入。<br />5 默认情况下，更新只能对符合匹配条件的第一个文档执行操作。要是有多个文档符合条件，其余的文档就没有变化。要使所有匹配到的文档都得到更新，可以设置update的第四个参数为true.<br /><br /></div> <img src ="http://www.cppblog.com/byc/aggbug/153842.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/byc/" target="_blank">八叶草</a> 2011-08-19 11:41 <a href="http://www.cppblog.com/byc/archive/2011/08/19/153842.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>查询（来源于mongodb权威指南）</title><link>http://www.cppblog.com/byc/archive/2011/07/18/151293.html</link><dc:creator>八叶草</dc:creator><author>八叶草</author><pubDate>Mon, 18 Jul 2011 03:59:00 GMT</pubDate><guid>http://www.cppblog.com/byc/archive/2011/07/18/151293.html</guid><wfw:comment>http://www.cppblog.com/byc/comments/151293.html</wfw:comment><comments>http://www.cppblog.com/byc/archive/2011/07/18/151293.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/byc/comments/commentRss/151293.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/byc/services/trackbacks/151293.html</trackback:ping><description><![CDATA[<a href="http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24ne">http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24ne</a><br /><a href="http://www.mongodb.org/display/DOCS/Advanced+Queries">Advanced Queries</a><!--
    Root decorator: this is a layer of abstraction that Confluence doesn't need. It will be removed eventually.
-->

<div id="content" class="page view">

.spacetree * ul{
padding-left:0px;
margin-left: 0px;
}
.spacetree * li{
margin-left: 5px;
padding-left:5px;
}
 


<table cellspacing="2" cellpadding="5">
<tbody>
<tr>
<td class="pagecontent" valign="top" width="80%" align="left">
<div class="wiki-content"><!-- wiki content -->

<div>
<ul><li><a href="http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-Introduction">Introduction</a></li><li><a href="http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-RetrievingaSubsetofFields">Retrieving a Subset of Fields</a></li><li><a href="http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-ConditionalOperators">Conditional Operators</a></li>
<ul><li><a href="http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%3C%2C%3C%3D%2C%3E%2C%3E%3D">&lt;, &lt;=, &gt;, &gt;=</a></li><li><a href="http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24all">$all</a></li><li><a href="http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24exists">$exists</a></li><li><a href="http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24mod">$mod</a></li><li><a href="http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24ne">$ne</a></li><li><a href="http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24in">$in</a></li><li><a href="http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24nin">$nin</a></li><li><a href="http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24nor">$nor</a></li><li><a href="http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24or">$or</a></li><li><a href="http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24and">$and</a></li><li><a href="http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24size">$size</a></li><li><a href="http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24type">$type</a></li></ul></li><li><a href="http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-RegularExpressions">Regular Expressions</a></li><li><a href="http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-ValueinanArray">Value in an Array</a></li>
<ul><li><a href="http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24elemMatch">$elemMatch</a></li></ul></li><li><a href="http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-ValueinanEmbeddedObject">Value in an Embedded Object</a></li><li><a href="http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-Metaoperator%3A%7B%7B%24not%7D%7D">Meta operator: <tt>$not</tt></a></li><li><a href="http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-JavascriptExpressionsand%7B%7B%24where%7D%7D">Javascript Expressions and <tt>$where</tt></a></li><li><a href="http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-CursorMethods">Cursor Methods</a></li>
<ul><li><a href="http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%7B%7Bcount%28%29%7D%7D"><tt>count()</tt></a></li><li><a href="http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%7B%7Blimit%28%29%7D%7D"><tt>limit()</tt></a></li><li><a href="http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%7B%7Bskip%28%29%7D%7D"><tt>skip()</tt></a></li><li><a href="http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%7B%7Bsnapshot%28%29%7D%7D"><tt>snapshot()</tt></a></li><li><a href="http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%7B%7Bsort%28%29%7D%7D"><tt>sort()</tt></a></li></ul></li><li><a href="http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-Metaqueryoperators">Meta query operators</a></li>
<ul><li><a href="http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24returnKey">$returnKey</a></li><li><a href="http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24maxScan">$maxScan</a></li><li><a href="http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24query">$query</a></li><li><a href="http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24orderby">$orderby</a></li><li><a href="http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24explain">$explain</a></li><li><a href="http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24snapshot">$snapshot</a></li><li><a href="http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24minand%24max">$min and $max</a></li><li><a href="http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24showDiskLoc">$showDiskLoc</a></li><li><a href="http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24hint">$hint</a></li><li><a href="http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24comment">$comment</a></li></ul></li><li><a href="http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%7B%7Bgroup%28%29%7D%7D"><tt>group()</tt></a></li><li><a href="http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-SeeAlso">See Also</a></li></ul></div></div></td></tr></tbody></table></div><br /><br />and<br />find({key:value,key:value})<br />指定返回的键<br />find({},{key:1,key:0})<br /><br />查询条件<br />$lt&lt;<br />$lte &lt;=<br />$gt &gt;<br />$gte &gt;=<br /><br /><br />find({key:{$get:18,$lte:30}})<br /><br />$in 可以用来查询一个键的多个值。<br />$nin 将返回与数组中所有条件都不匹配的文档。<br />find({key:{$in:[18,30]}})<br /><br />
<p>$ne：不等于，或不在数组中<br />ffind({key:{&amp;ne:value}})<br /><br /><br />$or更通用一些，用来完成多个键值的任意给定值。<br />find({$or:[{key:value},{key:value}]})<br /><br />$not是元条件句，即可以用在任何其他条件之上。<br />$mod会将查询的值除以第一个给定的值，若余数等于第二个给定值则返回该结果。<br />fnd({key:{$not:{$mod:[5,1]}}})<br /><br />条件句规则<br />条件句是内层文档的键，而修改器则是外层文档的键。<br />一个键可以有多个条件，但是一个键不能对应多个更新修改器。<br /><br />null不仅匹配自身，而且匹配不存在的。所以这种匹配还会返回缺少这个键的所有文档。<br />$exists判段键值已存在。<br />find({key:{$in:[null],$exists:true}})<br /><br /><strong>数组</strong><br /><br />$all 会匹配一组元素。<br />要找既有apple,又有banana的文档，就得用$all来查询<br />find({fruit:{$all:["apple","banana"]}})<br /><br />想查询数组指定位置的元素，则需要使用key.index语法指定下标<br />find({key.2:value})<br /><br />$size 可以用其查询指定长度的数组。$size并不能与其他查询子句组合。<br />find({key:{$size:3}})<br /><br />$slice find的第二个参数是可选的，可以指定返回那些键。$slice返回数组的一个子集合。<br />findOne(条件，{key:{$slice:10}}) 返回数组的前10条记录<br />findOne(条件，{key:{$slice:-10}}) 返回数组的后10条记录<br />findOne(条件，{key:{$slice:[23，10]}}) 偏移值23开始的10条记录<br /><br /><br /><strong>查询内嵌文档<br /></strong>find({key.subkey:value,key.subkey:value})<br />$elemMatch 将限定条件进行分组，仅当需要对一个内嵌文档的多个键操作时才会用到。<br />find(key:{$elemMatch:{key:value,key:value}})<br /><br />$where 可以执行任意JavaScript作为查询的一部分。<br />find($where:"this.x+this.y==10")<br />find($where:"function(){return 1;}")<br /><br /><br /><br /></p><img src ="http://www.cppblog.com/byc/aggbug/151293.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/byc/" target="_blank">八叶草</a> 2011-07-18 11:59 <a href="http://www.cppblog.com/byc/archive/2011/07/18/151293.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>mongodb-findAndModify（来源于mongodb权威指南）</title><link>http://www.cppblog.com/byc/archive/2011/07/15/151063.html</link><dc:creator>八叶草</dc:creator><author>八叶草</author><pubDate>Fri, 15 Jul 2011 07:04:00 GMT</pubDate><guid>http://www.cppblog.com/byc/archive/2011/07/15/151063.html</guid><wfw:comment>http://www.cppblog.com/byc/comments/151063.html</wfw:comment><comments>http://www.cppblog.com/byc/archive/2011/07/15/151063.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/byc/comments/commentRss/151063.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/byc/services/trackbacks/151063.html</trackback:ping><description><![CDATA[<a href="http://www.mongodb.org/display/DOCS/findAndModify+Command">http://www.mongodb.org/display/DOCS/findAndModify+Command</a><br /><a href="http://www.mongodb.org/display/DOCS/findAndModify+Command">findAndModify Command</a><br /><br />findAndModify的调用方式和普通的更新略有不同，还有点慢，这是因为它要等待数据库的响应。这对于操作查询以及执行其他需要取值和赋值风格的原子性操作来说是十分方便的。<br /><br />findAndModify命令中每个键对应的值如下所示。<br />findAndModify 字符窜，集合名。<br />query 查询文档，用来检索文档的条件。<br />sort 排序结果的条件。<br />update 修改器文档，对所找到的文档执行的更新。<br />remove 布尔类型，表示是否删除文档。<br />new 布尔类型，表示返回的是更新前的文档还是更新后的文档。默认是更新前的文档。<br />"update"和"remove"必须有一个，也只能有一个。要是匹配不到文档，这个命令会返回一个错误。<br /><br />这个命令有些限制。它一次只能处理一个文档，也不能执行upsert操作，只能更新已有文档。<br />相比普通更新来说，findAndModify速度要慢一些。大概耗时相当于一次查找，一次更新和一次getLastError顺序执行所需的时间。 <br /><br />db.runCommand("findAndModify":集合名,"query":{查询条件},"upadte":{修改器}) <img src ="http://www.cppblog.com/byc/aggbug/151063.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/byc/" target="_blank">八叶草</a> 2011-07-15 15:04 <a href="http://www.cppblog.com/byc/archive/2011/07/15/151063.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>mongodb修改器（来源于mongodb权威指南）</title><link>http://www.cppblog.com/byc/archive/2011/07/14/150998.html</link><dc:creator>八叶草</dc:creator><author>八叶草</author><pubDate>Thu, 14 Jul 2011 09:52:00 GMT</pubDate><guid>http://www.cppblog.com/byc/archive/2011/07/14/150998.html</guid><wfw:comment>http://www.cppblog.com/byc/comments/150998.html</wfw:comment><comments>http://www.cppblog.com/byc/archive/2011/07/14/150998.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/byc/comments/commentRss/150998.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/byc/services/trackbacks/150998.html</trackback:ping><description><![CDATA[<div><a href="http://www.mongodb.org/display/DOCS/Updating">http://www.mongodb.org/display/DOCS/Updating</a><br /><br />$set 用来指定一个键的值。如果这个键不存在，则创建它。用$set甚至可以修改键的数据类型。也可以用$set修改内嵌文档。<br />$unset 将键完全删除。<br /><br />$inc 用来增加已有键的值，或者在键不存在时创建一个键。$inc只能用于整数、长整数或双精度浮点数。要是用在其他类型的数据上就会导致操作失败。另外$inc键的值必须是数字。<br /><br />$push 会向已有的数组末尾加入一个元素，要是没有就会创建一个新的数组。<br />$addToSet 可以避免重复。和$each组合起来，可以添加多个不同的值。 db.user.update({},{$addToset:{array:{$each:[var1,var2,var3]}});<br /><br />$pop 这个修改器可以从数组任何一端删除元素。{$pop:{key:1}}从数组末尾删除一个元素，{$pop:{key:-1}}从头部删除。<br />$pull 会将所有匹配的部分删除。<br /><br /><br /><br /><br /><br /></div><img src ="http://www.cppblog.com/byc/aggbug/150998.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/byc/" target="_blank">八叶草</a> 2011-07-14 17:52 <a href="http://www.cppblog.com/byc/archive/2011/07/14/150998.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>