假设我有这些文件
> db.coll.find().toArray()
[
{
"_id" : ObjectId("5a36c3e218948d0722457078"),
"locality" : "Nasimi, Baku, Azerbaijan"
},
{
"_id" : ObjectId("5a36c3e218948d0722457079"),
"locality" : "Garland, TX, USA"
},
{
"_id" : ObjectId("5a36c3e218948d072245707a"),
"locality" : "Halytskyi District, Lviv, Lviv Oblast, Ukraine"
},
{
"_id" : ObjectId("5a36c3e218948d072245707b"),
"locality" : "Tozeur, Tunisia"
}
]
Run Code Online (Sandbox Code Playgroud)
我只想获取国家/地区,即最后一个逗号 ( ', ') 之后的内容。
例如
[
"Azerbaijan",
"USA",
"Ukraine",
"Tunisia"
]
Run Code Online (Sandbox Code Playgroud)
我已经设法获取第一个逗号的索引及其后的内容,但我不知道如何获取最后一个逗号。
[
"Azerbaijan",
"USA",
"Ukraine",
"Tunisia"
]
Run Code Online (Sandbox Code Playgroud)
这是可行的,但它会将所有结果加载到 JavaScript Mongo Shell 的内存中,但如果可以使用单个 MongoDB 聚合命令来完成,那就更理想了。
db.coll
.aggregate([
{
$project: {
lastIndexOf: …Run Code Online (Sandbox Code Playgroud) 我在 MongoDB 中有一个具有树结构的文档列表。我想要一个聚合查询,它返回给定_id属性的所有嵌套子项的计数。
结构:
{
'_id': '1',
'parentId': null,
},
{
'_id': '2',
'parentId': '1',
},
{
'_id': '3',
'parentId': '1',
},
{
'_id': '4',
'parentId': '3',
}
Run Code Online (Sandbox Code Playgroud)
聚合结果:(给出_id='1':)
{
total_children: 3
}
Run Code Online (Sandbox Code Playgroud)
我知道这可能需要一个阶段,这个问题与 MongoDB 中集合的递归搜索$graphLookup非常相似,但在某种意义上是向后的。
我有包含嵌套数组的集合。我需要根据以下条件获取数据:
empId : 19107
address.country: "AUS"
group.primaryGroup.primary:"Y"
group.subGroup.primarySubGroup.primary : "Y"
Run Code Online (Sandbox Code Playgroud)
输入:
{
"empId": "19107",
"address": [
{
"street": "no.12 wilson street",
"country":"AUS"
},
{
"description": "No.32 watson street",
"country":"CAN"
}
],
"mobile": 2387468238,
"group": [
{
"groupId": 75227,
"primaryGroup": [
{
"primary": "Y"
},
{
"primary": "N"
}
],
"subGroup": [
{
"subGroupId": 123,
"primarySubGroup": [
{
"primary": "Y"
},
{
"primary": "N"
}
]
},
{
"subGroupId": 234,
"primarySubGroup": [
{
"primary": "N"
},
{
"primary": "Y"
}
] …Run Code Online (Sandbox Code Playgroud) mongodb mongodb-query aggregation-framework spring-data-mongodb
好吧,我有一个似乎无法解决的问题。
我有一个这样的文档:
{
"playerId": "43345jhiuy3498jh4358yu345j",
"leaderboardId": "5b165ca15399c020e3f17a75",
"data": {
"type": "EclecticData",
"holeScores": [
{
"type": "RoundHoleData",
"xtraStrokes": 0,
"strokes": 3,
},
{
"type": "RoundHoleData",
"xtraStrokes": 1,
"strokes": 5,
},
{
"type": "RoundHoleData",
"xtraStrokes": 0,
"strokes": 4
}
]
}
}
Run Code Online (Sandbox Code Playgroud)
现在,我想要完成的是使用笔画的总和,然后再进行排序。我正在尝试这个:
var sortedBoard = db.collection.aggregate(
{$match: {"leaderboardId": boardId}},
{$group: {
_id: "$playerId",
played: { $sum: 1 },
strokes: {$sum: '$data.holeScores.strokes'}
}
},
{$project:{
type: "$SortBoard",
avgPoints: '$played',
sumPoints: "$strokes",
played : '$played'
}}
);
Run Code Online (Sandbox Code Playgroud)
这里的问题是我确实得到了正确的笔划总和,因为这是在另一个数组内。
希望有人可以帮助我,并提前致谢:-)
我有以下收藏
[
{
"Array1": [
{
"Array2": [
{
"name": "6666",
"Array3": [
{ "_id": 128938120, "nest": "samsung" },
{ "_id": 12803918239, "nest": "nokia" }
]
},
{
"name": "5555",
"Array3": [
{ "_id": 48102938109, "nest": "iphone" },
{ "_id": 501293890, "nest": "micromax" }
]
}
],
"name": "old apartment"
},
{
"Array2": [
{
"_id": 410923810,
"name": "3333",
"Array3": [
{ "_id": 48102938190, "nest": "airtel" },
{ "_id": 48102938190, "nest": "jio" }
]
},
{
"_id": 41092381029,
"name": "2222", …Run Code Online (Sandbox Code Playgroud) javascript mongodb node.js mongodb-query aggregation-framework
在我的 Mongo 数据库中,我有两个集合 \xe2\x80\x94speakers和speeches,并且我可以使用以下代码块“加入”它们(获取演讲者的演讲):
// I\'ve already found the \'speaker\' in the database\ndb.collection(\'speakers\').aggregate([{\n $match: { "uuid": speaker.uuid } },\n { $lookup: {\n from: "speeches",\n localField: "uuid",\n foreignField: "speaker_id",\n as: "speeches" } }\n]).toArray();\nRun Code Online (Sandbox Code Playgroud)\n\n它工作得很好,但我想按一个date或多个title字段对演讲数组进行排序,但我所做的一切似乎都无法实现。我在这里看到的示例都没有完成我需要它们做的事情。我尝试在块{ $sort: { "speech.title": -1 } }之后添加$lookup,但它什么也没做。这可能吗?
在简单迁移到聚合框架时,我遇到了问题.find().sort().skip().limit(),导致分页损坏:同一个文档出现在多个页面上。最后,我意识到这会影响结果$limit的顺序。$sort下面我将描述如何重现查看问题的步骤(在 Mongo 3.4.17 和 3.6.7 上检查)。
> // 1. Create a simple coleection and fill it with test data:
> for(var i = 0; i < 10; ++i) db.SomeCollection.insert({sortField: "just_some_string"});
> db.SomeCollection.count();
10
>
> // 2. Check, that with .find().sort().limit() the order of results does not depend on the `limit()`'s value:
db.SomeCollection.find().sort({"sortField": 1}).limit(5)
{ "_id" : ObjectId("5ba3ddf3a07260b77dddb531"), "sortField" : "just_some_string" }
{ "_id" : ObjectId("5ba3ddf3a07260b77dddb532"), "sortField" : "just_some_string" }
{ "_id" : ObjectId("5ba3ddf3a07260b77dddb533"), …Run Code Online (Sandbox Code Playgroud) 我有一个包含以下文档的集合:
{
map:{
key1:value1,
key2:value2,
....
}
}
Run Code Online (Sandbox Code Playgroud)
我想仅根据地图值过滤文档,而不管键,像map.*之类的东西等于某个值。可以这样做吗?
使用的MongoDB版本是3.4
在 React.js 应用程序的 Node.js 后端中,我使用
"mongodb" (as db.version returns): "3.4.10",
"mongoose": "5.3.4"
Run Code Online (Sandbox Code Playgroud)
问题是我无法将 $expr 与 mongoDB 版本 < 3.6 一起使用。由于这个问题(不推荐使用的方法等),升级 mongoDB 版本似乎需要付出很大的努力。所以我想知道是否有一种方法可以在不使用 $expr 的情况下完成我想做的事情?
这是代码:
match.$expr = {
$lt: ["$distance", "$range"] // "calculated_distance < tutor_range"
}
Run Code Online (Sandbox Code Playgroud)
你知道怎么做吗?这是完整的方法,如果您想了解更多详细信息。
exports.search = (req, res) => {
let lat1 = req.body.lat;
let lon1 = req.body.lng;
let page = req.body.page || 1;
let perPage = req.body.perPage || 10;
let radius = req.body.radius || 10000;
let levelsIn = req.body.levels && req.body.levels.length !== 0 ? req.body.levels.map(level => …Run Code Online (Sandbox Code Playgroud) 我有这个查询,并且正在使用$lookup,之后我想对value查找提供的数组中的求和。
我的查询(我正在使用猫鼬):
User.aggregate([{
$match: {
storeKey: req.body.store,
}
},
{
$group: {
_id: {
id: "$_id",
name: "$name",
cpf: "$cpf",
phone: "$phone",
email: "$email",
birthday: "$birthday"
},
totalServices: {
$sum: "$services"
}
}
},
{
$lookup: {
from: "schedules",
localField: "_id.phone",
foreignField: "customer.phone",
as: "user_detail"
}
},
{ $project: { "user_detail.value": 1 } },
])
Run Code Online (Sandbox Code Playgroud)
我的查询结果(样本集合):
{
"_id": {
"id": "5bd89899bda5c343749d00f0",
"name": "marcio",
"cpf": null,
"phone": "11999999999",
"email": "marcio@gmail.com",
"birthday": "2018-10-30T17:44:57.834Z"
},
"user_detail": [
{
"value": …Run Code Online (Sandbox Code Playgroud) mongoose mongodb node.js mongodb-query aggregation-framework