鉴于以下MongoDB文档集合:
{
title : 'shirt one'
tags : [
'shirt',
'cotton',
't-shirt',
'black'
]
},
{
title : 'shirt two'
tags : [
'shirt',
'white',
'button down collar'
]
},
{
title : 'shirt three'
tags : [
'shirt',
'cotton',
'red'
]
},
...
Run Code Online (Sandbox Code Playgroud)
如何检索匹配标签列表的项目列表,按匹配标签的总数排序?例如,给定此标记列表作为输入:
['shirt', 'cotton', 'black']
Run Code Online (Sandbox Code Playgroud)
我想通过匹配标签的总数检索按desc顺序排列的项目:
item total matches
-------- --------------
Shirt One 3 (matched shirt + cotton + black)
Shirt Three 2 (matched shirt + cotton)
Shirt Two 1 (matched shirt)
Run Code Online (Sandbox Code Playgroud)
在关系模式中,标记将是一个单独的表,您可以加入该表,计算匹配,并按计数排序.
但是,在Mongo ......?
似乎这种方法可行,
我希望计算与我的查询匹配的文档中名称数量的所有列,
tickets.count({time: {$gte: a}, time: {$lte: tomorrow}}).then(function (numTickets) {
Run Code Online (Sandbox Code Playgroud)
如何获得称为金额的文档列的总结果?
例如,如果我有:
{ time: 20, amount: 40}
{ time: 40, amount: 20}
Run Code Online (Sandbox Code Playgroud)
它会返回总金额(60)?
请记住,我确实需要{time: {$gte: a}, time: {$lte: tomorrow}在查询中使用。
我该怎么做?
javascript mongoose mongodb aggregation-framework mongodb-aggregation
我遇到了一个很烦人的问题,我似乎无法为我的特定情况找到任何解决方案。在我的 mongo 聚合管道中,我想添加一个字段,并且根据另一个字段的子字段的存在,我想分配该其他字段的子字段的值,如果该其他字段的子字段不存在,则为 1。
这是我尝试过的:
pipelineStages.push(
{$addFields:
{field:
{$cond: [
{$ne: ["$otherField.subField", null]},
"$otherField.subField", 1]
}
}
}
);
Run Code Online (Sandbox Code Playgroud)
但是,它仅适用于该字段存在的情况。另一方面,该新字段根本没有添加到管道中。任何想法我做错了什么?
这应该是一个 2 分钟的快速查找,但我正在搜索一个小时并且找不到任何解决方案。
如何将字段中每个单词的首字母大写
username?
{
"_id" : ObjectId("5908288bfbce59540a67fa11"),
"username" : "JOHN DOE"
},
{
"_id" : ObjectId("5908288bfbce59540a67fa12"),
"username" : "jane doe"
}
Run Code Online (Sandbox Code Playgroud)
尝试了这个我不太理解的解决方案,但它不起作用:Fetched 0 record(s) in 0ms
db.getCollection('test').toupper.aggregate(
[
{
$project: {
username: {
$concat: [{
$toUpper: { $substr: ["$username", 0, 1] }
}, { $substr: ["$username", 1, 3] }]
}
}
}])
Run Code Online (Sandbox Code Playgroud) 如何使用mongodbnode.js Node.js Mongodb 驱动程序的本机驱动程序调试 MongoDb 聚合步骤
我通过谷歌搜索找到的是这个npm包:https : //www.npmjs.com/package/mongo-aggregation-debugger
还有其他选择吗?
我是 mongodb 的新手,所以我希望这不会成为一个非常基本的问题。我做了一些研究,并试图应用我所发现的东西,但有些东西似乎让我忽略了。
我有两个以下格式的集合:
-----------------------------------------------------------------------
Shop
-----------------------------------------------------------------------
{
"shopId": "1002",
"shopPosId": "10002",
"description": "some description"
}
-----------------------------------------------------------------------
Compte
-----------------------------------------------------------------------
{
"shopId": "9000",
"shopPosId": "0000",
"clientUid": "474192"
}
Run Code Online (Sandbox Code Playgroud)
我想加入这些,在这样做之前,我想过滤掉Shop没有该shopPosId字段的 s 。
这是我的代码:
Compte.aggregate([
{
$match:
{
$and:[{"clientUid":clientUid}]
}
},
{
$lookup:
{
from: "Shop",
localField: "shopId",
foreignField: "shopId",
let: {"Shop.shopPosId": "$shopPosId"},
pipeline: [{$match: {"shopPosId": {"$exists": false}}}],
as: "shopDescr"
}
}]
);
Run Code Online (Sandbox Code Playgroud)
返回的结果是 an undefined,这意味着查询没有多大意义(因为实际上我至少应该得到一个 void 数组)。
难道是因为两个集合都有字段shopPosId?(如果是这样,这条线不let: {"Shop.shopPosId": "$shopPosId"}应该处理它吗?)
我是Mongo Db的新手,非常感谢您对此查询的一些帮助.在过去的几天里,我一直在筛选这些帖子,撕扯我的头发,看看我是否能找到与我的查询相关但没有运气的任何内容.
我有一个集合,文档结构类似于下面:
_id: xyz
Movieid: 123
MovieName: Titanic
ReleaseDate: 2000-01-01
_id: uvw
Movieid: 456
MovieName: Titanic II
ReleaseDate: 2018-01-01
_id: pqr
Movieid: 789
MovieName: Titanic III
ReleaseDate:
Run Code Online (Sandbox Code Playgroud)
我希望在3个单独的列中实现输出作为总电影,具有发布日期的电影和没有发布日期的电影的计数,如下所示:
Total | Released | UnReleased
3 | 2 | 1
Run Code Online (Sandbox Code Playgroud)
我能够编写单独的查询来执行计数,但我无法将所有这些成功整合到单个查询中.最终目标是创建一个视图,将这些计数作为输出.我已经尝试使用$和等运算符,但似乎无法使查询按预期工作....这是我得到的:
db.getCollection("Movies").aggregate(
$and: [
{
"$match" :
{"ReleaseDate":{$exists:true}}
}
,
{
$count:"Total"
},
{
"$match" :
{"ReleaseDate":{$exists:true,$nin:[""]}}
}
,
{
$count:"Released"
},
{
"$match" :
{"ReleaseDate":{$exists:true,$in:[""]}}
}
,
{
$count:"Unreleased"
}
]
);
Run Code Online (Sandbox Code Playgroud) 我TblStudent在 mongodb 中有一个集合
{
"_id": ObjectId("5baa85041d7859f40d000029"),
"Name": "John Doe",
"RollNo": 12,
"Class": "Ist"
....
}
Run Code Online (Sandbox Code Playgroud)
我还有一个TblRoute像
{
"_id": ObjectId("5baa818d1d78594010000029"),
"Name": "New york City",
"StopDetails": [
{
"StopId": "abc777",
"Name": "Block no 3"
},
{
"StopId": "abc888",
"Name": "Block no 4"
}
],
"NumberOfSeats": "10",
"StudentDetails": [
{
"StudentId": ObjectId("5baa85041d7859f40d000029"),
"VehicleId": "7756"
},
{
"StudentId": ObjectId("5baa85f61d7859401000002a"),
"VehicleId": "7676"
}
]
}
Run Code Online (Sandbox Code Playgroud)
我正在使用 mongodb 3.6 平台。我正在使用以下代码行
$query = ['_id' => new MongoDB\BSON\ObjectID($this->id)];
$cursor = $this->db->TblRoute->aggregate([
['$match' => $query], …Run Code Online (Sandbox Code Playgroud) aggregate-functions mongodb mongodb-php aggregation-framework php-mongodb
在 mongo (3.6) shell 中,我可以执行以下聚合来投影并将“_id”重命名为其他名称:
db.collection.aggregate([
{ $group : { _id : ... },
{ $project : { '_id': 0, // exclude the id field
'name' : '$_id', // project the "old" id value to the "name" field
...
}
}
])
Run Code Online (Sandbox Code Playgroud)
我需要使用 spring-data-mongo (通过 Spring Boot 2.3.1)来翻译它。我可以使用以下 ProjectionOperation 排除 id 字段:
project().andExclude("_id")
Run Code Online (Sandbox Code Playgroud)
但到目前为止我还无法重命名 id 字段。以下均无效:
我的第一个猜测
project().and("_id").as("name")
Run Code Online (Sandbox Code Playgroud)
正如这里所建议的
project().andExpression("_id").as("name")
Run Code Online (Sandbox Code Playgroud)
这不应该那么难,但我不知道我错过了什么。
编辑:数据样本和完整的聚合管道以重现故障
并附有以下文件:
{
"_id" : ObjectId("5a0c7a3135587511c9247db4"),
"_class" : "task",
"category" : "green",
"status" : "OK"
}
{
"_id" …Run Code Online (Sandbox Code Playgroud) 我正在查看以下文档。
下面将文档插入到集合中classes。
db.classes.insertMany( [
{ _id: 1, title: "Reading is ...", enrollmentlist: [ "giraffe2", "pandabear", "artie" ], days: ["M", "W", "F"] },
{ _id: 2, title: "But Writing ...", enrollmentlist: [ "giraffe1", "artie" ], days: ["T", "F"] }
] )
Run Code Online (Sandbox Code Playgroud)
和members集合:
db.members.insertMany( [
{ _id: 1, name: "artie", joined: new Date("2016-05-01"), status: "A" },
{ _id: 2, name: "giraffe", joined: new Date("2017-05-01"), status: "D" },
{ _id: 3, name: "giraffe1", joined: new Date("2017-10-01"), status: …Run Code Online (Sandbox Code Playgroud) mongodb ×9
mongoose ×3
aggregation ×1
debugging ×1
javascript ×1
mongodb-php ×1
node.js ×1
php-mongodb ×1