添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
db.goods.insert([
    {name: 'iphone XS', price: 8999}, 
    {name: '小米 9', price: 3299}, 
    {name: '华为 p30 Pro', price: 4988}

orders

* goodsId为刚才goods生成的_id * idDelete: 0 未删除 1 已删除 db.orders.insert([ {sum: 1, goodsId: ObjectId('5d522fd20ec3b11bf17a91e2'), isDelete: 0}, {sum: 2, goodsId: ObjectId('5d522fd20ec3b11bf17a91e2'), isDelete: 0}, {sum: 1, goodsId: ObjectId('5d522fd20ec3b11bf17a91e2'), isDelete: 1}, {sum: 1, goodsId: ObjectId('5d5230870ec3b11bf17a91e4'), isDelete: 0}, {sum: 1, goodsId: ObjectId('5d5230870ec3b11bf17a91e5'), isDelete: 0}, {sum: 1, goodsId: ObjectId('5d5230870ec3b11bf17a91e5'), isDelete: 1}, // 在mongoose的schame中定义为: goodsId:{ type: mongoose.Schema.ObjectId, ref: 'Article'

1、查询某一个商品的所有订单

// 查询语句
db.orders.find({goodsId: ObjectId("5d522fd20ec3b11bf17a91e2")})
// 结果
    "_id": ObjectId("5d5376580ec3b11bf17a91ec"),
    "sum": 1,
    "goodsId": ObjectId("5d522fd20ec3b11bf17a91e2"),
    "isDelete": 0
    "_id": ObjectId("5d5376580ec3b11bf17a91ed"),
    "sum": 2,
    "goodsId": ObjectId("5d522fd20ec3b11bf17a91e2"),
    "isDelete": 0
    "_id": ObjectId("5d5376580ec3b11bf17a91ee"),
    "sum": 1,
    "goodsId": ObjectId("5d522fd20ec3b11bf17a91e2"),
    "isDelete": 1
// 过滤已删除的订单
db.orders.find({goodsId: ObjectId("5d522fd20ec3b11bf17a91e2"), isDelete: 0})
// 结果
    "_id": ObjectId("5d5376580ec3b11bf17a91ec"),
    "sum": 1,
    "goodsId": ObjectId("5d522fd20ec3b11bf17a91e2"),
    "isDelete": 0
    "_id": ObjectId("5d5376580ec3b11bf17a91ed"),
    "sum": 2,
    "goodsId": ObjectId("5d522fd20ec3b11bf17a91e2"),
    "isDelete": 0

2、查询所有商品对应的所有订单

这里使用的的士MongoDB中的aggregate

查询所有商品以及对应的订单

// 关联查询
db.goods.aggregate([
            $lookup: {
                from: "orders", // 要关联查询的集合
                localField: "_id", // goods集合中的_id
                foreignField: "goodsId", // 要查询的集合的 关联id
                as: "child"
// 结果
    "_id": ObjectId("5d522fd20ec3b11bf17a91e2"),
    "name": "iphone XS",
    "price": 8999,
    "child": [
            "_id": ObjectId("5d5376580ec3b11bf17a91ec"),
            "sum": 1,
            "goodsId": ObjectId("5d522fd20ec3b11bf17a91e2"),
            "isDelete": 0
            "_id": ObjectId("5d5376580ec3b11bf17a91ed"),
            "sum": 2,
            "goodsId": ObjectId("5d522fd20ec3b11bf17a91e2"),
            "isDelete": 0
            "_id": ObjectId("5d5376580ec3b11bf17a91ee"),
            "sum": 1,
            "goodsId": ObjectId("5d522fd20ec3b11bf17a91e2"),
            "isDelete": 1
    "_id": ObjectId("5d5230870ec3b11bf17a91e4"),
    "name": "小米 9",
    "price": 3299,
    "child": [
            "_id": ObjectId("5d5376580ec3b11bf17a91ef"),
            "sum": 1,
            "goodsId": ObjectId("5d5230870ec3b11bf17a91e4"),
            "isDelete": 0
    "_id": ObjectId("5d5230870ec3b11bf17a91e5"),
    "name": "华为 p30 Pro",
    "price": 4988,
    "child": [
            "_id": ObjectId("5d5376580ec3b11bf17a91f0"),
            "sum": 1,
            "goodsId": ObjectId("5d5230870ec3b11bf17a91e5"),
            "isDelete": 0
            "_id": ObjectId("5d5376580ec3b11bf17a91f1"),
            "sum": 1,
            "goodsId": ObjectId("5d5230870ec3b11bf17a91e5"),
            "isDelete": 1

查询所有商品以及对应的订单数

// 关联查询
db.goods.aggregate([
            $lookup: {
                from: "orders",
                localField: "_id",
                foreignField: "goodsId",
                as: "child"
			$project: {
			    name:1, // 筛选要返回的数据,值为:0不返回,1返回
				price:1,
				orderNm: { 
					 "$size": "$child" 
    "_id": ObjectId("5d522fd20ec3b11bf17a91e2"),
    "name": "iphone XS",
    "price": 8999,
    "orderNm": NumberInt("3")
    "_id": ObjectId("5d5230870ec3b11bf17a91e4"),
    "name": "小米 9",
    "price": 3299,
    "orderNm": NumberInt("1")
    "_id": ObjectId("5d5230870ec3b11bf17a91e5"),
    "name": "华为 p30 Pro",
    "price": 4988,
    "orderNm": NumberInt("2")

查询单价大于5000商品以及对应的订单

// 关联查询,加入删选条件
db.goods.aggregate([
			$match: {
				price: {
					$gt : 5000 
            $lookup: {
                from: "orders",
                localField: "_id",
                foreignField: "goodsId",
                as: "child"

查询所有商品以及未删除的订单,是对关联集合的筛选

因为是对关联集合的筛选,所以不能简单通过match去处理

db.goods.aggregate([
            $lookup: {
               from: "orders",
                let: {
                    isDelete: "$isDelete", // 定义要筛选的条件
                    id: "$_id", // 当前集合的_id
                pipeline: [{
                    "$match": {
                        isDelete: 0, // 筛选条件,未删除的订单
                        $expr: {
                            $eq: ["$$id","$goodsId"] // 商品对应的订单
                }],
                as: "child",
// 结果
    "_id": ObjectId("5d522fd20ec3b11bf17a91e2"),
    "name": "iphone XS",
    "price": 8999,
    "child": [
            "_id": ObjectId("5d5376580ec3b11bf17a91ec"),
            "sum": 1,
            "goodsId": ObjectId("5d522fd20ec3b11bf17a91e2"),
            "isDelete": 0
            "_id": ObjectId("5d5376580ec3b11bf17a91ed"),
            "sum": 2,
            "goodsId": ObjectId("5d522fd20ec3b11bf17a91e2"),
            "isDelete": 0
    "_id": ObjectId("5d5230870ec3b11bf17a91e4"),
    "name": "小米 9",
    "price": 3299,
    "child": [
            "_id": ObjectId("5d5376580ec3b11bf17a91ef"),
            "sum": 1,
            "goodsId": ObjectId("5d5230870ec3b11bf17a91e4"),
            "isDelete": 0
    "_id": ObjectId("5d5230870ec3b11bf17a91e5"),
    "name": "华为 p30 Pro",
    "price": 4988,
    "child": [
            "_id": ObjectId("5d5376580ec3b11bf17a91f0"),
            "sum": 1,
            "goodsId": ObjectId("5d5230870ec3b11bf17a91e5"),
            "isDelete": 0
                    场景:商品列表中包含订单统计信息,商品和订单是一对多的关系注: 这里把商品和订单分成两个集合,仅做演示!具体场景,具体分析插入数据创建goods和orders集合goodsdb.goods.insert([    {name: 'iphone XS', price: 8999},     {name: '小米 9', price: 3299},     {name: '华为 ...
				
1. MongoDB 聚合管道简介 使用聚合管道可以对集合中的文档进行变换和组合,常用于多表关联查询、数据的统计。 db.COLLECTION_NAME.aggregate() 方法用来构建和使用聚合管道,下图是官网给的实例,可以看出来聚合管道的用法还是比较简单的。 2. MongoDB Aggregation 管道操作符与表达式 常用的管道操作符有以下这些: MySQL 和 MongoDB聚合对比: 管道操作符作为“键”,所对应的“值”叫做管道表达式,如 {$match:{status:”A”}},$match 称为管道操作符,而 status:”A”称为管道表达式,每
MongoDB合并两个集合 mongodb中遇到两张表需要合并,开始是用Navicat导出数据再导入数据,发现文档的类型都变了,所有都变成了字符串类型,于是找到一个函数 db."集合".find().forEach(function(item) { db."集合1".insert(item); db."集合".remove(item); // 合并个集合 db.saas_order.find().forEach(function(item) { db.saas_orders.insert(it
最近在做项目的时候碰到一个对mongoDB的数据处理,从MongoDB中拿到内嵌文档的时间排序的list。 一开始考虑到直接对mongoDB中的属性排序,后面发现属性存在内嵌文档中,所以处理中需要用到聚合函数。 (key)解决这个问题的过程让我学到很多,发现自己在解决一个问题不仅查找问题的姿势不对,浪费太多时间。而且在碰到问题之后,应该多看看解决办法,甚至解决了之后要去思考问题,回顾问题。而不是像以前一样,解决问题了就万事大吉,抛之脑后。 需要对document中的一个tweet_list 集合中的一个属性 timestamp_ms进行排序。 组内排序
主表A表 , 子表B表 , 子表会有0或多条记录对应主表 , 业务需求是要查询主表信息以及子表部分信息 , 并根据子表信息过滤数据 实际业务为 , 主表为项目记录, 子表为项目跟进记录 , 需要查询某个时间段的项目跟进情况 select a.name,a.unit_name ,c.add_time from a left join (select aid,max(add_time) as ...
很高兴为您解答。针对您的问题,我可以提供以下思路进行编写查询: 在MongoDB中,聚合查询可以通过聚合管道(pipe)实现。聚合管道是一系列的聚合操作符,用于对集合进行各种数据处理操作。 聚合框架的查询可以由多个聚合阶段(stage)组成,每个聚合阶段都由一个聚合操作符定义。一个阶段的输出结果会成为下一个阶段的输入。下面是一个聚合框架查询示例: db.users.aggregate([ // 过滤出年龄大于等于30岁的用户 { $match: { age: { $gte: 30 } } }, // 对年龄分组,统计每个年龄段用户的数量 { $group: { _id: "$age", count: { $sum: 1 } } }, // 对统计结果按照用户数量进行降序排序 { $sort: { count: -1 } }, // 只保留前10个年龄段的用户数量统计结果 { $limit: 10 } 上述示例中,我们对用户集合进行了聚合查询操作,首先使用了 $match 操作符过滤出年龄大于等于30岁的用户,然后使用 $group 操作符对符合条件的用户按照年龄进行了分组,并统计了每个年龄段的用户数量。接着使用 $sort 操作符将统计结果按照用户数量进行了降序排序,最后使用 $limit 操作符只保留了前10个年龄段的用户数量统计结果。 希望以上内容对您有所帮助。如有疑问,欢迎继续提问。
nginx: [error] open() "/usr/local/var/run/nginx.pid" failed (2: No such file or directory) 38380