本文首发于个人博客https://kezunlin.me/post/e88f04e5/,欢迎阅读最新内容!

pymongo and mongoengine tutorial on ubuntu 16.04

Guide

version

  • mongo 2.6.10
  • mongo gui: robo3t-1.3.1
  • pymongo 3.9.0
  • MongoEngine 0.18.2

install mongodb

sudo apt-get install -y mongodb

mongo shell

mongo --host mongodb0.example.com --port 27017

mongo --version
MongoDB shell version: 2.6.10

see mongo shell

> mongo
# show all dbs
> show dbs # display current db
>db
test (default database) # switch or create db
> use mydb
> db.help() > show collections
posts
system.indexes > db.posts.help() > db.posts.find()

help on db and collections

>db.dropDatabase()
>db.posts.drop()
>db.copyDatabase("mydb","backup_mydb")

mongo gui

Robomongo offically changed it's name and released two different products Studio 3T and Robo 3T. Old robomongo is now called Robo 3T. Studio 3T is for professionals.

wget https://download-test.robomongo.org/linux/robo3t-1.3.1-linux-x86_64-7419c406.tar.gz

vim .bashrc
export PATH=/home/kezunlin/program/robo3t/bin:$PATH

allow mongodb to access from remote.

vim /etc/mongodb.conf
#bind_ip = 127.0.0.1
bind_ip = 0.0.0.0

by default, mongodb only allow to access from local.

restart mongodb again

 > sudo service mongodb status
mongodb.service - An object/document-oriented database
Loaded: loaded (/lib/systemd/system/mongodb.service; enabled; vendor preset: enabled)
Active: active (running) since 四 2019-09-26 16:11:03 CST; 7s ago
Docs: man:mongod(1)
Main PID: 4917 (mongod)
Tasks: 10
Memory: 3.0G
CPU: 70ms
CGroup: /system.slice/mongodb.service
└─4917 /usr/bin/mongod --config /etc/mongodb.conf 9月 26 16:11:03 node17 systemd[1]: Started An object/document-oriented database.
9月 26 16:11:03 node17 mongod[4917]: warning: bind_ip of 0.0.0.0 is unnecessary; listens on all ips by default

access from remote now

robo3t

python mongodb

pip install pymongo
pip install mongoengine

One library that provides a higher abstraction on top of PyMongo is MongoEngine. MongoEngine is an object document mapper (ODM), which is roughly equivalent to a SQL-based object relational mapper (ORM). The abstraction provided by MongoEngine is class-based, so all of the models you create are classes.

pymongo

def test_mongo_client():

    from pymongo import MongoClient
client = MongoClient('localhost', 27017) db = client['mydb'] posts = db.posts
post_data = {
'title': 'Python and MongoDB',
'content': 'PyMongo is fun, you guys',
'author': 'Scott'
}
result = posts.insert_one(post_data)
print('One post: {0}'.format(result.inserted_id)) post_1 = {
'title': 'Python and MongoDB',
'content': 'PyMongo is fun, you guys',
'author': 'Scott'
}
post_2 = {
'title': 'Virtual Environments',
'content': 'Use virtual environments, you guys',
'author': 'Scott'
}
post_3 = {
'title': 'Learning Python',
'content': 'Learn Python, it is easy',
'author': 'Bill'
}
new_result = posts.insert_many([post_1, post_2, post_3])
print('Multiple posts: {0}'.format(new_result.inserted_ids)) # find one
bills_post = posts.find_one({'author': 'Bill'})
print(bills_post) # fine many
scotts_posts = posts.find({'author': 'Scott'})
print(scotts_posts) for post in scotts_posts:
print(post) client.close()

mongoengine

from mongoengine import *

def test_mongo_engine():
# define collection
class Post(Document):
title = StringField(required=True, max_length=200)
content = StringField(required=True)
author = StringField(required=True, max_length=50)
published = DateTimeField(default=datetime.datetime.now) connect('mydb',
host='localhost',
port=27017,
alias="default" # must be `default`
)
# mongoengine.connection.MongoEngineConnectionError: You have not defined a default connection post_1 = Post(
title='Sample Post',
content='Some engaging content',
author='Scott'
)
post_1.save() # This will perform an insert
print(post_1.title)
print(post_1.id) post_1.title = 'A Better Post Title'
post_1.save() # This will perform an atomic edit on "title"
print(post_1.title)
print(post_1.id) disconnect(alias='default') test_mongo_engine()

Reference

History

  • 20190926: created

Copyright

最新文章

  1. Web Fundamentsals学习1-Multiple-Screen-Site
  2. 备忘DES带向量的加密和解密与DES简单加密与解密
  3. nodeJS express框架 中文乱码解决办法
  4. Unable to execute dex: Multiple dex files define Lcom/kenai/jbosh/AbstractAttr
  5. 【LR】安装LR11后遇到的问题
  6. HDOJ 2058 The sum problem
  7. MyBatis框架(二)
  8. .Neter玩转Linux系列之三:Linux下的分区讲解
  9. 《读书报告 -- Elasticsearch入门 》-- 安装以及简单使用(1)
  10. 设置 NSZombieEnabled 定位 EXC_BAD_ACCESS 错误
  11. Python零基础入门之Tkinter的对话框
  12. 记录一下idea自动生成Entity
  13. 让网站不去请求favicon.ico图标
  14. Mongodb集群与分片 2
  15. SG 函数初步 HDU 1536 && HDU 1944
  16. 一个Flume 异常(Put queue for MemoryTransaction of capacity 100 full)的排查和解决思路
  17. 居于mtk芯片安卓车机系统具体流程
  18. SqlCmd -Windows Cluster Model
  19. 【专题】数位DP
  20. Ubuntu 安装 GNOME 之后开机进不了桌面

热门文章

  1. @ImportResource
  2. [考试反思]1110csp-s模拟测试109:细节
  3. Java连载55-接口的作用、接口举例
  4. 【安富莱】STM32H7用户手册发布,重在BSP驱动包设计方法,HAL库的框架学习,授人以渔,更新至63章(2019-07-21)
  5. 一篇文章看懂angularjs component组件
  6. BootStrap 关于input与btn的点击focus取消特效相关css
  7. 【朝花夕拾】Android自定义View篇之(七)Android事件分发机制(下)滑动冲突解决方案总结
  8. 【spring-boot 源码解析】spring-boot 依赖管理梳理图
  9. ASP.NET MVC教程四:ASP.NET MVC中页面传值的几种方式
  10. C#_.NetFramework_Web项目_NPOI_EXCEL数据导入