假设我们有以下由聚合管道生成的文档:
[
{
"_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) 如果区分大小写,如何使排序功能良好。我们怎样才能使它正确
请建议修复它的最佳方法
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。
我想根据其先前的值更新 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猫鼬方法来实现它?如果是,我的申请有什么问题?
我的 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
我的流程和代码:
从表单数据上传图像并将图像的 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) 我正在为 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)
请指导是否有任何方法可以做到这一点,任何形式的建议将不胜感激,谢谢。
我有一个集合,其中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)
查询结构有问题吗?
我想从 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)
请帮忙。
我有一个 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) 我有 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找不到解决方案。
我有一个类似的 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) 记录是数据库:
[
{
"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)