首页 » Web前端 » phpmongodelete技巧_mongo简单查询联合查询与删除语法

phpmongodelete技巧_mongo简单查询联合查询与删除语法

访客 2024-12-05 0

扫一扫用手机浏览

文章目录 [+]

查询2017年以前的数据:

db.xxCollection.find({\"大众uploadDate\"大众:{$lt:new Date(2017,1,1)}});

phpmongodelete技巧_mongo简单查询联合查询与删除语法

(>) 大于 - $gt

phpmongodelete技巧_mongo简单查询联合查询与删除语法
(图片来自网络侵删)

(<) 小于 - $lt

(>=) 大于即是 - $gte

(<= ) 小于即是 - $lte

$in

db.xxCollection.find( { status: { $in: [ \"大众A\公众, \"大众D\公众 ] } } )

相称于sql的in

$or

db.xxCollection.find( { $or: [ { status: \"大众A\公众 }, { qty: { $lt: 30 } } ] } )

$and也有,不过什么都不加便是and的意思,以是一样平常用不到

排序:

db.xxCollection.find({\"大众uploadDate\"大众:{$lte:new Date(2017,1,1)}).sort({\公众uploadDate\"大众:-1});

表示按uploadDate降序排列

限定返回值:

db.fs.files.find({\"大众uploadDate\"大众:{$lte:new Date(2017,1,1)}},{\公众filename\"大众:1}).sort({\公众uploadDate\"大众:-1});

这样会返回filename。
1表示返回,0是不返回

但是_id是默认返回的,以是这条语句会返回两个字段

db.fs.files.find({\公众uploadDate\"大众:{$lte:new Date(2017,1,1)}},{\公众filename\"大众:1,\公众_id\公众:0}).sort({\"大众uploadDate\"大众:-1});

如果,特地指定哪个不返回,那么便是返回其他所有的

db.fs.files.find({\公众uploadDate\公众:{$lte:new Date(2017,1,1)}},{\"大众_id\"大众:0}).sort({\"大众uploadDate\"大众:-1});

会返回除_id外的所有字段

关联查询

这个语法有点麻烦

须要用到聚合函数中的 $lookup

$lookup的语法

{ $lookup: { from: <要关联的凑集>, localField: <当前的凑集的字段>, foreignField: <要关联的凑集的字段>, as: <返回的字段名> }}

举例:

订单表:

db.orders.insert([ { \公众_id\"大众 : 1, \"大众item\公众 : \"大众almonds\公众, \"大众price\"大众 : 12, \"大众quantity\公众 : 2 }, { \"大众_id\"大众 : 2, \公众item\"大众 : \"大众pecans\"大众, \"大众price\"大众 : 20, \公众quantity\"大众 : 1 }, { \"大众_id\"大众 : 3 }])

商品表:

db.inventory.insert([ { \"大众_id\公众 : 1, \"大众sku\"大众 : \"大众almonds\公众, description: \公众product 1\公众, \公众instock\公众 : 120 }, { \公众_id\"大众 : 2, \"大众sku\公众 : \公众bread\"大众, description: \"大众product 2\"大众, \"大众instock\公众 : 80 }, { \"大众_id\"大众 : 3, \"大众sku\"大众 : \公众cashews\公众, description: \"大众product 3\"大众, \"大众instock\"大众 : 60 }, { \公众_id\"大众 : 4, \"大众sku\公众 : \公众pecans\"大众, description: \"大众product 4\"大众, \公众instock\公众 : 70 }, { \公众_id\"大众 : 5, \"大众sku\"大众: null, description: \公众Incomplete\公众 }, { \公众_id\公众 : 6 }])

根据订单的item关联查询出商品信息:

db.orders.aggregate([ { $lookup: { from: \公众inventory\"大众, localField: \公众item\"大众, foreignField: \公众sku\公众, as: \"大众inventory_docs\"大众 } }])

相称于sql中:

SELECT , inventory_docsFROM ordersWHERE inventory_docs IN (SELECT FROM inventoryWHERE sku= orders.item);

返回的结果:

{ \公众_id\"大众 : 1, \"大众item\"大众 : \公众almonds\"大众, \"大众price\"大众 : 12, \公众quantity\公众 : 2, \"大众inventory_docs\公众 : [ { \"大众_id\"大众 : 1, \公众sku\公众 : \"大众almonds\"大众, \"大众description\"大众 : \公众product 1\"大众, \"大众instock\"大众 : 120 } ]}{ \"大众_id\"大众 : 2, \"大众item\"大众 : \公众pecans\公众, \"大众price\公众 : 20, \"大众quantity\公众 : 1, \"大众inventory_docs\"大众 : [ { \公众_id\"大众 : 4, \公众sku\"大众 : \"大众pecans\"大众, \"大众description\"大众 : \公众product 4\公众, \"大众instock\"大众 : 70 } ]}{ \公众_id\公众 : 3, \"大众inventory_docs\"大众 : [ { \公众_id\"大众 : 5, \"大众sku\公众 : null, \公众description\"大众 : \"大众Incomplete\公众 }, { \"大众_id\"大众 : 6 } ]}

增加查询条件:$match

查询订单金额大于10的

db.orders.aggregate([ { $lookup: { from: \"大众inventory\"大众, localField: \"大众item\公众, foreignField: \公众sku\公众, as: \"大众inventory_docs\公众 } }, { $match: { \"大众price\公众: {$gt:10} } }])

$match实行的比较,是基于lookup的结果来的

将\"大众price\"大众: {$gt:10}换成“inventory_docs.instock\公众: {$gt:100}

查询库存大于100的

指定返回字段$project

{ $project:{ \公众inventory_docs\"大众: 1, \公众item\"大众: 1, \公众_id\"大众: 0 } }

汇总起来:

db.orders.aggregate([ { $lookup: { from: \"大众inventory\公众, localField: \"大众item\公众, foreignField: \"大众sku\"大众, as: \"大众inventory_docs\"大众 } }, { $match: { \"大众inventory_docs.instock\公众: {$gt:100} } }, { $project:{ \"大众inventory_docs\公众: 1, \公众item\"大众: 1, \"大众_id\"大众: 0 } }])

返回:

{ \"大众item\"大众 : \"大众almonds\"大众, \公众inventory_docs\公众 : [ { \"大众_id\"大众 : 1, \公众sku\"大众 : \"大众almonds\"大众, \公众description\"大众 : \"大众product 1\公众, \"大众instock\"大众 : 120 } ] }删除

每次在数据库上做删除操作,我都很紧张。
就怕搞错了条件语句。

db.xxCollection.deleteOne({条件})

db.xxCollection.deleteMany({条件})

db.collection.findOneAndDelete({条件},{排序})

可以加排序字段,用来限定删除哪个元素,如

db.scores.findOneAndDelete({ \"大众name\公众 : \"大众A. MacDyver\"大众 },{ sort : { \公众points\公众 : 1 } })

提醒:

1,任何时候delete语句都要有条件

2,删除前,先用find语句查一查,不要怕麻烦

关于mongo删除操作的几点解释:

1,删除documents不会删除索引,纵然是删了所有的documents

2,原子性。
所有的写操作在mongo中都是原子性的

标签:

相关文章

phpcurleasysetopt技巧_高并发HTTP请求实践

当今,正处于互联网高速发展的时期,每个人的生活都离不开互联网,互联网已经影响了每个人生活的方方面面。我们利用淘宝、京东进行购物,利...

Web前端 2024-12-07 阅读0 评论0