小编tur*_*hal的帖子

mongodb - 根据条件字段合并两个对象

假设我们有以下由聚合管道生成的文档:

[
  {
    "_id": ObjectId("5a934e000102030405000000"),
    "description": "description for item 1",
    "item_code": "00001"
  },
  {
    "_id": ObjectId("5a934e000102030405000001"),
    "description": "description for item 2",
    "item_code": "00002"
  },
  {
    "_id": ObjectId("5a934e000102030405000002"),
    "description": "description for item 3",
    "item_code": "00003"
  },
  {
    "_id": ObjectId("5a934e000102030405000003"),
    "extrafield": "extra field for item 2",
    "item_code": "00002"
  }
]
Run Code Online (Sandbox Code Playgroud)

如何将相同的文档合并item_code为一个,保留所有属性?想要的结果:

[
  {
    "description": "description for item 1",
    "item_code": "00001"
  },
  {
    "description": "description for item 2",
    "extrafield": "extra field for item 2",
    "item_code": "00002"
  },
  {
    "description": "description for …
Run Code Online (Sandbox Code Playgroud)

mongodb mongodb-query aggregation-framework

3
推荐指数
1
解决办法
328
查看次数

mongodb 对嵌套在文档数组中的数组进行展开和排序

如果区分大小写,如何使排序功能良好。我们怎样才能使它正确

请建议修复它的最佳方法

db.products.aggregate([
  {
    "$unwind": "$receipe"
  },
  {
    "$unwind": "$receipe.burger"
  },
  {
    "$sort": {
      "receipe.burger.name": 1
    }
  }
])
Run Code Online (Sandbox Code Playgroud)

https://mongoplayground.net/p/2pnUABI_-先生

在我的示例中,familyburger 应该首先显示,而不是 Paneer Burger。

sorting mongodb mongodb-query aggregation-framework

3
推荐指数
1
解决办法
1192
查看次数

如何使用 mongoose 在 updateOne 中使用 $cond ?

我想根据其先前的值更新 mongodb 中的值,如果null(保存为字符串)那么我会将其更新为新值,否则我想保持原样。
这是我的代码:

User.updateOne({_id: user._id}, {$set: {
                        deviceId: {$cond: [{$eq: ['null']}, req.body.deviceId, 'null']}
                    }}, null, function (err, res){
                    if (err){
                        return done(err)
                    }else{
                        return done(null, user)
                    }
                })
Run Code Online (Sandbox Code Playgroud)

但我收到以下错误(我相信这表明我的语法不正确):

CastError: Cast to string failed for value "{ '$cond': [ { '$eq': [Array] }, 'MYDEVICEID', 'null' ] }" (type Object) at path "deviceId"
    at model.Query.exec (D:\X_APP\XAPP_BACKEND\node_modules\mongoose\lib\query.js:4478:21)
    at _update (D:\X_APP\XAPP_BACKEND\node_modules\mongoose\lib\query.js:4330:11)
    at model.Query.Query.updateOne (D:\X_APP\XAPP_BACKEND\node_modules\mongoose\lib\query.js:4229:10)
    at _update (D:\X_APP\XAPP_BACKEND\node_modules\mongoose\lib\model.js:3834:16)
    at Function.updateOne (D:\X_APP\XAPP_BACKEND\node_modules\mongoose\lib\model.js:3770:10)
    at file:///D:/X_APP/XAPP_BACKEND/middlewares/userMiddleware.js:24:32
    at processTicksAndRejections (internal/process/task_queues.js:95:5)
Run Code Online (Sandbox Code Playgroud)

我搜索并看到许多使用聚合的应用程序,但是是否可以使用我的updateOne猫鼬方法来实现它?如果是,我的申请有什么问题?

mongoose mongodb node.js

3
推荐指数
1
解决办法
2185
查看次数

使用投影过滤嵌套数组而不使用展开

我的 collection1 在项目字段中保存了 collection2 的 _ids ,如下所示:

    {
        "name": "adafd",
        "employeeId": "employeeId",
        "locations": [
            "ObjectId(adfaldjf)",
            "ObjectId(adfaldjf)",
            "ObjectId(adfaldjf)",
            "ObjectId(adfaldjf)",
            "ObjectId(adfaldjf)",
            "ObjectId(adfaldjf)"
        ]
    }
Run Code Online (Sandbox Code Playgroud)

集合2如下

"collection2": [
    {   
        "location": "india",
        "states": [
            {
                "stateCode": "TN",
                    "districts": {
                        "cities": [
                            {
                                "code": 1,
                                "name": "xxx"
                            },
                            {
                                "code": 4,
                                "name": "zzz"
                            },
                            {
                                "code": 6,
                                "name": "yyy"
                            }
                        ]
                    }
            }
        ]
    }
]
Run Code Online (Sandbox Code Playgroud)

我试图在查找后过滤 collection2 内的嵌套数组,如下所示:

    db.collection.aggregate([
        {
            $lookup: {
                from: "collection2",
                localField: "locations",
                foreignField: "_id",
                as: "locations"
            }
        },
        {
            $match: …
Run Code Online (Sandbox Code Playgroud)

mongodb mongodb-query nosql-aggregation aggregation-framework dynamodb-queries

3
推荐指数
1
解决办法
1968
查看次数

如何在MongoDB中设置缓冲区偏移范围,它不允许在BSON对象中上传超过16MB的文件?

我的流程和代码:

从表单数据上传图像并将图像的 BSON 字符串存储到数据库,以下是步骤和代码:

  1. 从 multer upload 上传文件
  2. 从文件系统读取文件 - fs
  3. 将图像内容字符串转换为base64字符串
  4. 将base64字符串转换为BSON字符串

配置:

node -v: v12.13.1
npm -v: 6.12.1
fs-extra: ^8.1.0
multer: ^1.4.2
Run Code Online (Sandbox Code Playgroud)

代码:

var upload = multer({ 
    storage: multer.diskStorage({
        destination: function (req, file, cb) {
            cb(null, 'uploads')
        },
        filename: function (req, file, cb) {
            cb(null, file.fieldname + '-' + Date.now())
        }
    })
});
upload.single('picture'), (req, res) => {
    
    let imageString = fs.readFileSync(req.file.path);
    let encodeImage = imageString.toString('base64');
    let bufferImage = Buffer.from(encodeImage, 'base64');
    var finalObj = {
        contentType: req.file.mimetype,
        image: …
Run Code Online (Sandbox Code Playgroud)

buffer mongodb node.js express

2
推荐指数
1
解决办法
4076
查看次数

Swagger JSDoc 不从子文件夹加载 API 文件

我正在为 node.js 和 express 框架中的一个项目集成 swagger 文档,

NPM: Swagger JSDoc - ^4.0.0 NPM

以下是文件夹结构:注:模块1,模块2和模块3文件夹!

 - app 

   - module-1 
      - module-1.controller.js
      - module-1.model.js
      - module-1.route.js
   - module-2 
      - module-2.controller.js
      - module-2.model.js
      - module-2.route.js
   - module-3 
      - module-3.controller.js
      - module-3.model.js
      - module-3.route.js
Run Code Online (Sandbox Code Playgroud)

工作示例:

swaggerJSDoc({
    swaggerDefinition: {
        ...require('../swagger.json')
    },
    apis: [
        './app/module-1/*',
        './app/module-2/*'
        './app/module-3/*'
    ]
})
Run Code Online (Sandbox Code Playgroud)

节点:我不想每次创建一个像上面例子那样的新模块时都添加模块路径。

我期待的是下面的示例:我想将它设置一次,如设置主文件夹/文件路径,它将自动从提供的主文件夹/文件路径加载 API Doc 数据。

我尝试下面的例子,但它不工作/app/*

swaggerJSDoc({
    swaggerDefinition: {
        ...require('../swagger.json')
    },
    apis: [
        './app/*'
    ]
})

Run Code Online (Sandbox Code Playgroud)

请指导是否有任何方法可以做到这一点,任何形式的建议将不胜感激,谢谢。

node.js express swagger swagger-jsdocs

2
推荐指数
1
解决办法
1656
查看次数

将字符串日期转换为 MongoDB 中的日期

我有一个集合,其中resolve_at字段以字符串格式存储,如下所示:

{"resolved_at": 2020-05-23 05:57:40}
Run Code Online (Sandbox Code Playgroud)

"%Y-%m-%d"现在我想使用以下查询将其转换为 format 的 Date 类型:

db.tickets.aggregate([{"$match":{"botExecResult": "BotSuccess",
    "$and":[{"resolved_at":{"$type":"string","$ne":""}}],
    }},
   { 
   $project: {
      date: {
         $dateFromString: {
            dateString: '$resolved_at',
            format: "%Y-%m-%d"
         
            
         }}}},      
  ])
Run Code Online (Sandbox Code Playgroud)

执行此操作时,我不断收到此错误:

 Error: command failed: {
    "ok" : 0,
    "errmsg" : "Error parsing date string '2020-03-17 23:03:29'; 10: Trailing data ' '",
    "code" : 241,
    "codeName" : "ConversionFailure"
} : aggregate failed 
Details:
_getErrorWithCode@src/mongo/shell/utils.js:25:13
doassert@src/mongo/shell/assert.js:18:14
_assertCommandWorked@src/mongo/shell/assert.js:534:17
assert.commandWorked@src/mongo/shell/assert.js:618:16
DB.prototype._runAggregate@src/mongo/shell/db.js:260:9
DBCollection.prototype.aggregate@src/mongo/shell/collection.js:1062:12
DBCollection.prototype.aggregate@:1:355
@(shell):1:1
Run Code Online (Sandbox Code Playgroud)

查询结构有问题吗?

mongodb mongodb-query

2
推荐指数
1
解决办法
2256
查看次数

如何在Python中提取mongoDB文档的最后一个objectID?

我想从 python 中的集合中提取文档的最后一个 objectID 并将其存储在 python 对象中。

我正在做这样的事情

db.dataset2.find().sort( {'_id': -1 } ).limit(1);
Run Code Online (Sandbox Code Playgroud)

但这给了我一个错误。

TypeError: if no direction is specified, key_or_list must be an instance of the list
Run Code Online (Sandbox Code Playgroud)

请帮忙。

python mongodb pymongo mongodb-query

1
推荐指数
1
解决办法
1627
查看次数

如何在 find() 中获取数组长度而不是完整数组?

我有一个 mongodb (使用 mongoose)集合(“items”),其中包含一个数组(“images”)。一些示例文档:

[
  {
    "_id" : ObjectId("543fa67e9672ec37ebe3d026"),
    "name" : "Alice",
    "images" : [
      { url: "http://images.com/1.jpg" },
      { url: "http://images.com/2.jpg" },
      { url: "http://images.com/3.jpg" },
    ]
  },
  {
    "_id" : ObjectId("543fa67e9672ec37ebe3d027"),
    "name" : "Bob",
    "images" : [
      { url: "http://images.com/4.jpg" },
      { url: "http://images.com/5.jpg" },
    ]
  },
]
Run Code Online (Sandbox Code Playgroud)

我想实现一个查询,它返回数组长度(而不是数组内容)以及其他文档属性。我知道我可以得到数组长度

db.items.aggregate([
  { "$project" : { "_id" : 0, "imagesLength" : { "$size" : "$images" } } }
])
Run Code Online (Sandbox Code Playgroud)

但我需要这些imagesLength值以及查找返回的文档:

db.items.findMany(
  { ...filter },
  { name: 1, imagesCount: …
Run Code Online (Sandbox Code Playgroud)

javascript arrays mongoose mongodb node.js

1
推荐指数
1
解决办法
253
查看次数

如果文档不存在则推送文档,如果存在于嵌套数组中则使用 mongoose 更新

我有 mongo 文档,当出现新订单时,如果订单part_id已经存在,我需要推送它或更新(增加数量)。

   {
       user_id: '13',     
       stock: [
         {
           part_id: 'P456',
           quantity: 3
         },
         {
           part_id: 'P905',
           quantity: 8
         }
       ]
    }
Run Code Online (Sandbox Code Playgroud)

我尝试过使用{upsert: true}$inc找不到解决方案。

javascript mongoose mongodb

1
推荐指数
1
解决办法
4078
查看次数

将具有相同值的文档分组,并为每组获取具有最大值的文档

我有一个类似的 mongodb 集合:

{ "_id" : 1, "item" : "item1", "quantity" : 2, "date" : ISODate("2014-01-01T08:00:00Z") }
{ "_id" : 2, "item" : "item2", "quantity" : 1, "date" : ISODate("2014-02-03T09:00:00Z") }
{ "_id" : 3, "item" : "item2", "quantity" : 5, "date" : ISODate("2014-02-03T09:05:00Z") }
{ "_id" : 4, "item" : "item1", "quantity" : 10, "date" : ISODate("2014-02-15T08:00:00Z") }
{ "_id" : 5, "item" : "item2", "quantity" : 10, "date" : ISODate("2014-02-15T09:05:00Z") }
Run Code Online (Sandbox Code Playgroud)

我想获取每个项目的最新文档(基于日期值)

意味着我想要一个查询/聚合给我:

{ …
Run Code Online (Sandbox Code Playgroud)

javascript mongodb aggregation-framework

0
推荐指数
1
解决办法
41
查看次数

聚合:Mongodb 聚合查询示例

记录是数据库:

[
  {
    "title": "title1",
    "author": [
      {
        "name": "user1",
        "register": true
      },
      {
        "name": "user2",
        "register": true
      }
    ],
    "tags": [
      "tag1",
      "tag2",
      "tag3"
    ]
  },
  {
    "title": "title2",
    "author": [
      {
        "name": "user1",
        "register": true
      },
      {
        "name": "user2",
        "register": true
      }
    ],
    "tags": [
      "tag1",
      "tag2",
      "tag3"
    ]
  },
  {
    "title": "title3",
    "author": [
      {
        "name": "user1",
        "register": true
      },
      {
        "name": "user2",
        "register": true
      }
    ],
    "tags": [
      "tag1",
      "tag2",
      "tag3"
    ]
  }
]
Run Code Online (Sandbox Code Playgroud)

预期输出:

{"tag":"tag1", …
Run Code Online (Sandbox Code Playgroud)

mongoose mongodb mongodb-query aggregation-framework

0
推荐指数
1
解决办法
39
查看次数