MongoDB的简单操作记录

=Start=

缘由:

MongoDB在我的日常工作和项目中用的比较少,操作不怎么熟练,在这里简单记录学习一下MongoDB中的常见操作,方便要用的时候进行参考。

正文:

参考解答:
# 命令行操作
# 查询MongoDB中都有哪些数据库
> show dbs

# 查看当前使用的是哪个数据库
> db

# 选中并切换至某个数据库 test1
> use test1

# 查看数据库 test1 中都有哪些集合
> show collections

# 查看数据库 test1 的集合 posts 中都有哪些元素
> db.posts.find()

# 查看数据库 test1 的集合 posts 中都有哪些元素(只挑选前 2 个元素)
> db.posts.find().limit(2)

# 向数据库 test1 的集合 users 插入元素
> db.users.insert({name: 'paulo'})
> db.users.insert({name: 'pedro'})

# 模糊查询
> db.users.find({name: /a/}) //like '%a%'
> db.users.find({name: /^pa/}) //like 'pa%'
> db.users.find({name: /ro$/}) //like '%ro'

# 更新操作
> db.users.update({'name':'pedro'},{$set:{'name':'New Update pedro'}})

# 查询更新后的结果
> db.users.find()

# 删除操作
> db.users.insert({name: 'ppp'})
> db.users.remove({name: 'ppp'})

> db.users.find()

> db.users.remove()
# 报错: E QUERY [thread1] Error: remove needs a query

# 删除指定 collection 中的所有元素
> db.users.remove({})

&

# 查询collection foo 中以 _id 字段进行排序的前 50 条记录
db.foo.find().sort({_id:1}).limit(50)

# 查询collection foo 中进行「自然排序」的前 50 条记录
db.foo.find().sort({$natural:1}).limit(50)

&

// 查询 name 数组字段是否有下标为 1 的元素(如果有则说明至少有2个元素)
db.accommodations.find({'name.1': {$exists: true}})

// 使用 $where
db.accommodations.find( {$where: "this.name.length > 1"} )

// 提前创建一个额外的字段 NamesArrayLength 用于存放特定数组的大小,方便后面使用,速度更快更好
db.accommodations.find({"NamesArrayLength": {$gt: 1} })
# Python操作
from pymongo import MongoClient
client = MongoClient('mongodb://localhost:27017/')

# db = client['test_db']
db = client.test_db

# collection = db['posts']
collection = db.posts

import pprint
import datetime

post = {"author": "Mike",
"text": "My first blog post!",
"tags": ["mongodb", "python", "pymongo"],
"date": datetime.datetime.utcnow()}

post_id = collection.insert_one(post).inserted_id
print("post id is ", post_id)

cur_collection = db.collection_names(include_system_collections=False)
print("cur_collection is :", cur_collection)

pprint.pprint(collection.find_one())

print("Find By Post Author:")
post = collection.find_one({"author": "Mike"})
pprint.pprint(post)

print("Find By Post ID:")
post = collection.find_one({"_id": post_id})
pprint.pprint(post)

# Web应用程序中的常见任务是从请求URL获取ObjectId并找到匹配的文档。
# 在这种情况下,必须将ObjectId从一个字符串转换到符合条件的类型才行。
from bson.objectid import ObjectId
# The web framework gets post_id from the URL and passes it as a string
def get_post(post_id):
# Convert from string to ObjectId:
document = client.db.collection.find_one({'_id': ObjectId(post_id)})


# 批量插入
new_posts = [{"_id": 1000,
"author": "Curry",
"text": "Another post!",
"tags": ["bulk", "insert"],
"date": datetime.datetime(2018, 5, 12, 11, 14)},
{"_id": 1001,
"author": "Mike",
"title": "MongoDB is fun",
"text": "and pretty easy too!",
"date": datetime.datetime(2019, 5, 30, 10, 45)}
]

# collection = db.posts
result = collection.insert_many(new_posts)
print("Bulk Inserts Result is :", result.inserted_ids)


# 批量查询
# collection = db.posts
for post in collection.find():
pprint.pprint(post)

for post in collection.find({"author": "Mike"}):
pprint.pprint(post)


print("posts count is = ", collection.count())

print("posts's author is Mike count is =", collection.find({"author": "Mike"}).count())

d = datetime.datetime(2019, 5, 31, 12)
for post in collection.find({"date": {"$lt": d}}).sort("author"):
pprint.pprint(post)
参考链接:

=END=

声明: 除非注明,ixyzero.com文章均为原创,转载请以链接形式标明本文地址,谢谢!
https://ixyzero.com/blog/archives/4457.html

发表评论

电子邮件地址不会被公开。 必填项已用*标注