参考:
http://www.runoob.com/mongodb/mongodb-window-install.html
mongodb 常用命令:
http://www.cnblogs.com/zhongweiv/p/node_mongodb.html#mongodb_learn
因为很少用mongodb,经常会忘记命令。所以在这里做个记录。
cmd入到mongodb安装目录,如:
C:\Program Files\MongoDB\Server\3.2\bin
启动命令,
mongod.exe --dbpath c:\data\db
可视化工具现在用的是mongobooster,挺好用的。
如果需要使用ORM、ODM方便开发,可以用mongoose,
http://mongoosejs.com/
http://blog.modulus.io/getting-started-with-mongoose
关于为什么要使用mongoose,这里有说明,
很多nodejs的新手都是直接用mongodb本身直接操作数据库,我之前也是如此
不知道大家有没有遇到过这个错误:
Error: db object already connecting, open cannot be called multiple times
也许你会说是异步写得不好,但是就算异步写得再好,也逃避不了这个错误
因为无论如何,都要用到db.open();这东西,而且访问完毕还得db.close();
于是就有一个问题:刷新得太快,或者多个用户同时访问数据库,数据库没来得及关闭,那个Error就会出现
可以做一下实验,在访问数据库的页面按住F5,就会很容易看到在页面上或者控制台上抛出的Error勒
用mongoose就不会出现这错误勒,因为一旦连接好数据库,db就会处于open状态,不存在访问时要打开,然后又要关闭的规则
https://cnodejs.org/topic/50c145ed637ffa4155c7eaee
https://cnodejs.org/topic/504b4924e2b84515770103dd
Array数据类型的pop,push,pull用法说明
http://jzfjeff.blog.51cto.com/1478834/1003191
这里,我们将了解一下数组修改器。数组,是我们经常看到和使用到的且非常有用的数据结构:它不仅可以通过索进行引用,还可以作为集合来使用。数组修改器,顾名思义,它是用来修改数组的,而不能用来修改整数或者字符串。数组修改器不多,就那么几个,但熟练掌握它后,将给我们带来非常方便的操作。下面,我们来了解一下:
> db.user.findOne()
{
"_id" : ObjectId("4ffcb2ed65282ea95f7e3304"),
"age" : 23,
"favorite" : {
"1" : "reading",
"2" : "swimming",
"3" : "listening music"
},
"fname" : "jeff",
"height" : 166,
"lname" : "jiang",
"relationships" : [
{
"fname" : "deng",
"lname" : "pan"
},
{
"fname" : "qiang",
"lname" : "he"
},
{
"fname" : "dongren",
"lname" : "zeng"
}
]
}
以上是我的还在完善中的个人信息文档。假设最近我又交了一个好朋友,我想把他加到我的人际关系“relationships”数组中。这时,$push修改器就派上用场了。$push的作用就是,如果指定的键已经存在,它会向已有的数组末尾加入一个元素,要是没有就会创建一个新的数组。下面我们把新朋友加进去。
> db.user.update({"_id" : ObjectId("4ffcb2ed65282ea95f7e3304")},{$push:{"relationships":{"fname":"xiong","lname":"lan"}}})
> db.user.findOne()
{
"_id" : ObjectId("4ffcb2ed65282ea95f7e3304"),
"age" : 23,
"favorite" : {
"1" : "reading",
"2" : "swimming",
"3" : "listening music"
},
"fname" : "jeff",
"height" : 166,
"lname" : "jiang",
"relationships" : [
{
"fname" : "deng",
"lname" : "pan"
},
{
"fname" : "qiang",
"lname" : "he"
},
{
"fname" : "dongren",
"lname" : "zeng"
},
{
"fname" : "xiong",
"lname" : "lan"
}
]
}
有加就有减,那么怎么对数组进行“减”操作呢。能达到对数组“减”目的的修改器有两个,$pop和$pull。$pop和$pull又有区别,我们来分别实验。首先是$pop
> db.user.update({"_id" : ObjectId("4ffcb2ed65282ea95f7e3304")},{$pop:{"relationships":1}})
> db.user.findOne()
{
"_id" : ObjectId("4ffcb2ed65282ea95f7e3304"),
"age" : 23,
"favorite" : {
"1" : "reading",
"2" : "swimming",
"3" : "listening music"
},
"fname" : "jeff",
"height" : 166,
"lname" : "jiang",
"relationships" : [
{
"fname" : "deng",
"lname" : "pan"
},
{
"fname" : "qiang",
"lname" : "he"
},
{
"fname" : "dongren",
"lname" : "zeng"
}
]
}
从上面可以看出,它把我们刚加进去的朋友又删除了,也就是说它从数组的最后删除。那么,如果我们想从数组的开头删除该怎么办呢。很简单,把上面的“1”改成“-1”,它将逆向操作。下面看一下:
> db.user.update({"_id" : ObjectId("4ffcb2ed65282ea95f7e3304")},{$pop:{"relationships":-1}})
> db.user.findOne()
{
"_id" : ObjectId("4ffcb2ed65282ea95f7e3304"),
"age" : 23,
"favorite" : {
"1" : "reading",
"2" : "swimming",
"3" : "listening music"
},
"fname" : "jeff",
"height" : 166,
"lname" : "jiang",
"relationships" : [
{
"fname" : "qiang",
"lname" : "he"
},
{
"fname" : "dongren",
"lname" : "zeng"
}
]
}
从结果可以看出,它达到了我们预期的目的。那么如果我们想删除数组中间的呢。这时,$pull派上用场。首先,我们先将新朋友加进去,这里我不再演示。但我们可以想到“dongren”这个人是在数组的中间。现在我们要将他删除:
> db.user.update({"_id" : ObjectId("4ffcb2ed65282ea95f7e3304")},{$pull:{"relationships":{"fname":"dongren","lname":"zeng"}}})
> db.user.findOne()
{
"_id" : ObjectId("4ffcb2ed65282ea95f7e3304"),
"age" : 23,
"favorite" : {
"1" : "reading",
"2" : "swimming",
"3" : "listening music"
},
"fname" : "jeff",
"height" : 166,
"lname" : "jiang",
"relationships" : [
{
"fname" : "qiang",
"lname" : "he"
},
{
"fname" : "xiong",
"lname" : "lan"
}
]
}
从上面可以看出,$pull可以将数组中间的数据删除。这里还有一点要注意,$pull会将所有匹配到的数据都删除,这里我就不做实验了。下面,我们再来看看$push还有什么特点,我们再往数组里插入一相同的数据,看看会如何:
> db.user.update({"_id" : ObjectId("4ffcb2ed65282ea95f7e3304")},{$push:{"relationships":{"fname":"xiong","lname":"lan"}}})
> db.user.findOne()
{
"_id" : ObjectId("4ffcb2ed65282ea95f7e3304"),
"age" : 23,
"favorite" : {
"1" : "reading",
"2" : "swimming",
"3" : "listening music"
},
"fname" : "jeff",
"height" : 166,
"lname" : "jiang",
"relationships" : [
{
"fname" : "qiang",
"lname" : "he"
},
{
"fname" : "xiong",
"lname" : "lan"
},
{
"fname" : "xiong",
"lname" : "lan"
}
]
}
结果表明,它是能正常插入到数组的。而在实际生产环境中,我们都不想看到这样的结果,那么,这里又出现了两个可以用的修改器:$ne和$addToSet。$ne主要拿来判断,若数组里面有这个值,则不插入;没有才插入。
> db.user.update({"relationships.fname":{$ne:"xiong"}},{$set:{"fname":"xiong","lname":"lan"}})
> db.user.findOne()
{
"_id" : ObjectId("4ffcb2ed65282ea95f7e3304"),
"age" : 23,
"favorite" : {
"1" : "reading",
"2" : "swimming",
"3" : "listening music"
},
"fname" : "jeff",
"height" : 166,
"lname" : "jiang",
"relationships" : [
{
"fname" : "qiang",
"lname" : "he"
},
{
"fname" : "xiong",
"lname" : "lan"
},
{
"fname" : "xiong",
"lname" : "lan"
}
]
}
由结果可以看出,由于该数据在数组中已经存在,所以不再插入。其实,$addToSet比$ne更好用,它可以自己判断数据是否存在,而且它和$each结合使用,还能同时在数组中插入多个数据,这是$ne没办法办到的,下面我们来看一下$addToSet的用法,这里顺便结合了$each的使用:
> db.user.update({"_id" : ObjectId("4ffcb2ed65282ea95f7e3304")},
{$addToSet:{"relationships":{$each:[{"fname":"xiong","lname":"lan"},
{"fname":"dongren","lname":"zeng"}]}}})
> db.user.findOne()
{
"_id" : ObjectId("4ffcb2ed65282ea95f7e3304"),
"age" : 23,
"favorite" : {
"1" : "reading",
"2" : "swimming",
"3" : "listening music"
},
"fname" : "jeff",
"height" : 166,
"lname" : "jiang",
"relationships" : [
{
"fname" : "qiang",
"lname" : "he"
},
{
"fname" : "xiong",
"lname" : "lan"
},
{
"fname" : "xiong",
"lname" : "lan"
},
{
"fname" : "dongren",
"lname" : "zeng"
}
]
}
在修改语句中,我们想同时插入{"fname":"xiong","lname":"lan"},
{"fname":"dongren","lname":"zeng"}两个数据,但在原数组中,
{"fname":"xiong","lname":"lan"}这个数据已经存在,所以它只插入了后面那条。达到了我们想要的目的。所以,我个人更喜欢使用$addToSet。
有时候数组有多个值,而我们只想对其中的一部分进行操作。如果我们把整个文档都抄下来,那太麻烦也太愚蠢了。好在mongodb给我们提供了两种简便方法:通过位置或者操作符“$”。下面我们来分别看看这两种方法怎么使用。首先是通过数组位置来操作。数组都是以0开头的,可以将下标直接作为键来选择元素。例如,我们想给数组的第一个数据加上年龄键值对,我们可以这么操作:
> db.user.update({"_id" : ObjectId("4ffcb2ed65282ea95f7e3304")},{$set:{"relationships.0.age":22}})
> db.user.findOne()
{
"_id" : ObjectId("4ffcb2ed65282ea95f7e3304"),
"age" : 23,
"favorite" : {
"1" : "reading",
"2" : "swimming",
"3" : "listening music"
},
"fname" : "jeff",
"height" : 166,
"lname" : "jiang",
"relationships" : [
{
"age" : 22,
"fname" : "qiang",
"lname" : "he"
},
{
"fname" : "deng",
"lname" : "pan"
},
{
"fname" : "xiong",
"lname" : "lan"
}
]
}
可是很多情况下,不预先查询文档我们就不知道要修改数组的元素的下标。这时定位操作符“$”就很好用了。它就是用来定位查询文档已匹配的元素,并进行更新。我们来看看它怎么用:
> db.user.update({"relationships.fname":"xiong"},{$set:{"relationships.$.age":22}})
> db.user.findOne()
{
"_id" : ObjectId("4ffcb2ed65282ea95f7e3304"),
"age" : 23,
"favorite" : {
"1" : "reading",
"2" : "swimming",
"3" : "listening music"
},
"fname" : "jeff",
"height" : 166,
"lname" : "jiang",
"relationships" : [
{
"age" : 22,
"fname" : "qiang",
"lname" : "he"
},
{
"age" : 22,
"fname" : "deng",
"lname" : "pan"
},
{
"age" : 22,
"fname" : "xiong",
"lname" : "lan"
}
]
}
有关数组的常用的修改器的用法就写到这里。可能例子用得不是很恰当,但通过这些例子,我觉得至少能对这些修改器的作用有个大致的了解。不妥甚至不对的地方,欢迎大神们拍砖。
常用mongodb 查询操作:
* 查询重复task_id
db.tasks.aggregate(
{$group: {_id:"$task_id", count:{$sum:1},docs:{$push:"$_id"}}},
{$match:{count:{$gt:1}}}
)
通过task_id查询
db.tasks.find({task_id:586785})
删除所有数据
db.tasks.remove({})
删除message是空的数据
db.tasks.remove({message:[]})
查询message是空的数据
db.tasks.find({message:[]})
查询message的长度小于5
db.tasks.find({ $where: "this.message.length < 5" }});
查詢message 長度=4
db.tasks.find({"message": {"$size":4}});
db.tasks.find({"message": {"$size":{"$gt":3}}});
查询level包含error的数据
db.tasks.find({level:"error"})
查询总数
db.tasks.count({})
查询某个时间段的tasks,sort:{"task_id":1} 1:asc,-1:desc
db.tasks.find({"timestamp.1":{"$gt":new Date("2016-10-27 8:00"),"$lt":new Date("2016-10-27 09:00")}}).sort({"task_id":-1});
如果需要查询array类型的数据结构,请参考:
http://blog.csdn.net/drifterj/article/details/7833883
分享到:
相关推荐
“WIN7装mongodb可视化工具robomongo”表明该资源是针对Windows 7系统的安装包,确保在这一平台上可以顺利安装和运行。 标签“robomongo”明确了我们要讨论的重点。RoboMongo(现称Robo 3T)具有以下主要特点和功能...
MongoDB的可视化工具studio,Windows 64位版的,可试用30天
MongoDB Compass是官方提供的图形化管理工具,它提供了可视化的数据浏览、查询构建和性能分析功能。 1. 下载:访问MongoDB Compass的官方网站,根据操作系统选择合适的下载版本。 2. 安装:运行下载的安装程序,...
在本项目中,项目说明和部署教程将指导你完成整个流程,从设置Python环境,安装所需库,到编写爬虫脚本,配置MongoDB数据库,再到编写读取和分析数据的代码,最后进行数据可视化。项目源码提供了实际示例,你可以...
2. **MongoDB Compass**: 这是一个图形用户界面(GUI)工具,便于可视化数据、查询数据库、监控性能和管理集群。它可以帮助非开发人员更直观地理解数据结构和查询结果。 3. **MongoDB Compass Connect**: 用于连接...
2. **可视化数据**:它提供了以表格、JSON和树形视图查看数据的方式,使用户能够轻松理解和操作MongoDB文档结构。 3. **查询构建器**:对于不熟悉MongoDB查询语法的用户,查询构建器是一个强大的工具,通过拖放操作...
高分毕业设计 基于Python爬虫+Django+MongoDB的豆瓣数据可视化分析系统源码+部署文档+全部数据资料.zip高分毕业设计 基于Python爬虫+Django+MongoDB的豆瓣数据可视化分析系统源码+部署文档+全部数据资料.zip高分毕业...
这个插件使得在Java应用中使用MongoDB变得更加便捷,提供了代码编辑、调试、查询以及数据可视化等功能,极大地提高了开发效率。 一、安装MongoDB的Eclipse插件 在Eclipse中安装MongoDB插件,通常可以通过以下步骤...
一个在window下连接mongoDB的可视化工具,无需购买即可使用的破解版本
操作 mongoDB 的可视化软件,可以更直观的对数据进修维护、修改等,可以兼容 mongoDB 4版本及以上。已压缩,需要解压。该软件是从官网下载的,无需担心(因为部分人可能因为网络问题从外国的网站下载速度很慢所以...
使用技术 节点 mongodb React es6 电子 koa2 猫鼬 一个window,mac的桌面应用,这个是node端 网页端gitHub ...如果没有mongodb先去去官网下载... Roto(数据库可视化工具)下载地址 mongoose(mongodb框架)官方文档
YApi是一个非常实用的工具,它提供了一个本地部署的、面向前后端开发人员以及质量保证人员的可视化接口管理平台。在开始之前,确保你的系统满足以下环境要求: 1. **Node.js**:建议安装最新版本的Node.js,它是一...
6. **数据可视化**:为了更好地理解影评的情感倾向和热门话题,可能会使用`matplotlib`或`seaborn`进行数据可视化,如柱状图、折线图或词云图,展示评论数量、评分分布或关键词频率。 7. **数据存储**:使用PyMongo...
安装MongoDBWindows下MongoDB的安装可以参考这篇文章:Linux下MongoDB的安装可以参考这篇文章:MacOS下MongoDB的安装可以参考这篇文章:建议安装MongoDB可视化工具Robo 3T,下载地址见官网:MongoDB安装成功后打开...
5. **图表和可视化**:DBeaver可以将查询结果以图表形式展示,如柱状图、饼图、折线图等,便于数据可视化分析。 6. **版本控制集成**:与Git等版本控制系统集成,可以对数据库对象进行版本控制,确保数据库结构的...
8. **数据可视化**:演示图片可能展示了利用工具(如Matplotlib、Seaborn或Tableau)创建的数据可视化结果,以便直观地呈现分析结果。 9. **文档编写**:一份详细的项目说明文档对于理解项目架构、工作流程、功能...
【模拟风电场监控项目】是一个非常适合毕业设计的实践项目,它涵盖了多个IT领域的知识点,包括但不限于软件工程、数据可视化、物联网(IoT)技术、实时数据处理和后端开发。这个项目提供了完整的源码和详细说明,确保...
例如,云数据库产品中的MySQL、TDSQL、Redis、MongoDB等都是典型的后台系统,而大数据可视化产品如“云图”则需要将复杂的数据以直观的图形展现给用户。这些产品背后的应用库/工具,比如Bere、QBT框架、TCFF以及...
课程“ Fullstack Advanced React&GraphQL” 韦斯·博斯(Wes Bos) 书签:7 / 70,0分钟模块1:简介和设置工具和入门文件设置节点的最新版本他使用Firefox MongoDB Compass(可视化数据库) VS代码主题: 字型: ...
可能还使用了数据库系统(如 MongoDB)来保存用户的输入和反馈,以及数据分析工具(如 D3.js)来可视化Johari窗口的变化。 通过使用 "improv-johari" 应用,即兴表演团体可以进行更深层次的自我探索和团队建设,...