- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
收藏
我有一个包含以下数据的 abyssBattles 集合:
[
{
"floor_level": "12-2",
"battle_index": 1,
"party": [
"60b6edd41ec85acb419565dc",
"60b6edd41ec85acb419565e3",
"60b6edd41ec85acb41956648",
"60b6edd41ec85acb41956669"
]
},
{
"floor_level": "12-3",
"battle_index": 1,
"party": [
"60b6edd41ec85acb419565dc",
"60b6edd41ec85acb419565e3",
"60b6edd41ec85acb41956648",
"60b6edd41ec85acb41956669"
]
},
{
"floor_level": "12-1",
"battle_index": 1,
"party": [
"60b6edd41ec85acb419565dc",
"60b6edd41ec85acb419565e3",
"60b6edd41ec85acb41956648",
"60b6edd41ec85acb41956669"
]
},
{
"floor_level": "12-1",
"battle_index": 2,
"party": [
"60b6ee621ec85acb4195b0c6",
"60b6ee621ec85acb4195b0d2",
"60b6ee621ec85acb4195b0e8",
"60ba56671ec85acb41045ff5"
]
},
{
"floor_level": "12-2",
"battle_index": 2,
"party": [
"60b6ee621ec85acb4195b0c6",
"60b6ee621ec85acb4195b0d2",
"60b6ee621ec85acb4195b0e8",
"60ba56671ec85acb41045ff5"
]
}
]
我主要是通过
floor_level
过滤来自
ObjectIds
在
party
大批。我尝试在
party
处汇总记录包含完全相同的 4
ObjectId
s(已排序)。我想按
floor_level
将这些分组和
battle_index
它们属于,并获得
party
的总和计数.
[
{
floor: "12-1-1",
parties: [
{
party: [
"60b6ee621ec85acb4195b0c6",
"60b6ee621ec85acb4195b0d2",
"60b6ee621ec85acb4195b0e8",
"60ba56671ec85acb41045ff5"
],
count: 23
},
{
party: [
"60b6edd41ec85acb419565dc",
"60b6edd41ec85acb419565e3",
"60b6edd41ec85acb41956648",
"60b6edd41ec85acb41956669"
],
count: 13
},
...
].
},
{
floor: "12-1-2",
parties: [
{
party: [
"60b6ee621ec85acb4195b0c6",
"60b6ee621ec85acb4195b0d2",
"60b6ee621ec85acb4195b0e8",
"60ba56671ec85acb41045ff5"
],
count: 52
},
{
party: [
"60b6edd41ec85acb419565dc",
"60b6edd41ec85acb419565e3",
"60b6edd41ec85acb41956648",
"60b6edd41ec85acb41956669"
],
count: 13
},
...
]
}
]
哪里
count
表示具体
party
的编号找到相应的
floor
.每个
floor
会有多个
party
在一个数组中,每个
party
是 4
ObjectId
的独特组合s。
[
{
"floor_level": "12-1",
"battle_index": 1,
"party": [ 1, 2, 3, 4 ]
},
{
"floor_level": "12-1",
"battle_index": 1,
"party": [ 1, 2, 4, 5 ]
},
{
"floor_level": "12-1",
"battle_index": 1,
"party": [ 1, 2, 4, 5]
},
{
"floor_level": "12-2",
"battle_index": 1,
"party": [ 1, 2, 3, 4]
},
{
"floor_level": "12-2",
"battle_index": 1,
"party": [ 1, 2, 4, 5]
}
]
如果我查询
floor_level
s [ "12-1", "12-2"] 我希望看到这个输出:
[
{
"floor": "12-1",
"parties": [
{
"party": [ 1, 2, 3, 4 ],
"count": 1
},
{
"party": [ 1, 2, 4, 5 ],
"count": 2
}
]
},
{
"floor": "12-2",
"parties": [
{
"party": [ 1, 2, 3, 4 ],
"count": 1
},
{
"party": [ 1, 2, 4, 5 ],
"count": 1
}
]
}
]
尝试
db.aggregate([
{ "$group": {
"floor": { $concat: [$floor_level, $battle_index] },
}},
{ "$lookup": {
"from": "party",
"pipeline": [
{ "$match": {
"$expr": { "$eq": [ "$party", "$$party"] }
}},
{ "$group": {
"party": "$party",
"count": { "$sum": 1 }
}},
{ "$sort": { "count": -1 } },
],
"as": "parties"
}}
])
但是我发现使用稍微复杂的嵌套数组和对象结构更难实现我的结果。
最佳答案
形成更新的预期输出,希望这对您有所帮助
db.collection.aggregate([
{
"$group": {
"_id": { level: "$floor_level", party: "$party" },
"count": { "$sum": 1 }
}
},
{
"$group": {
"_id": "$_id.level",
"parties": {
"$push": {
party: "$_id.party",
count: "$count"
}
}
}
}
])
工作Mongo playground
db.collection.aggregate([
{
"$group": {
"_id": { level: "$floor_level", party: "$party", index:"$battle_index" },
"count": { "$sum": 1 }
}
},
{
"$group": {
"_id": { "level": "$_id.level", "index": "$_id.index" },
"parties": {
"$push": {
party: "$_id.party",
count: "$count"
}
}
}
},
{
$addFields: {
floor: { "$concat": [ "$_id.level", "-", { $toString: "$_id.index" } ] },
_id: "$$REMOVE",
index: "$$REMOVE"
}
}
])
工作Mongo playground
关于MongoDB按ObjectIds数组聚合匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68049216/
假设我在文件开头有这个定义: const ObjectId = mongoose.Types.ObjectId; 您更喜欢哪一个,为什么? // 1 new ObjectId; // 2 new O
我通过以下两种不同的方法生成了一个 ObjectId: user@ubuntu:~$ python Python 2.7.1+ (r271:86832, Apr 11 2011, 18:05:24)
我编写了一个 Python 代码,用于从名为 Tweets 的 Mongo 集合中获取推文。我不想只获取对象文本并添加一个名为 Sentiment 的附加对象。 当我循环推文并将 json 对象解析为
我是 Node.js 和 mongodb 的新手。 在我的 Node.js 应用程序中,我使用的是 mongodb,对于 mongodb 操作,我使用的是 mongoose。 在 package.js
使用 parse.com 和 JavaScript SDK。 这就是我想要实现的目标。 页面上将用户( friend )列表返回给用户,然后他们可以单击其中一个用户,页面将更新以列出所有该用户的项目(
我有一个像这样的 objectId:["56153e4c2040efa61b4e267f","56033932efefe0d8657bbd9e"]为了在我的模型中保存该信息,我使用: items: [
我有一个标签模式: const TagSchema = new Schema({ label: {type: String, unique: true, minlength: 2}, upda
在online API他们指的是 Mongo::ObjectID。 我有 require 'mongo' 但 ruby 仍然找不到它。例如,我需要通过它的 Id 找到一个对象,我正在做: mong
作为管道的最后阶段,我有一个像这样的 $project : { ... anId : new ObjectId() } 但是 mongo 为每个文档生成相同的 Id。我希望它为每个投影文档生成
我需要在这样的数组中找到 mongoose objectID 的索引: [ { _id: 58676b0a27b3782b92066ab6, score: 0 }, { _id: 58676aca
我们可以从客户端生成 ObjectId 并在插入时使用它。我确实希望它在插入过程之外进行处理。我需要将其配置为我的默认 _id 生成过程,以便当我调用 insert 时,insert 方法应该创建自定
这是代码。跟随者和追随者无法工作。换句话说,我无法将像 {"user1", objectId1} 这样的对象推送到这两个数组。是否允许有一个字段同时包含对象 ID 和字符串名称?感谢您的帮助。 The
为什么 Meteor.js 使用它自己的 IDsp 算法> 为什么不使用 MongoDB ObjectId()? 最佳答案 如果你选择使用 Meteor,它对对象 ID 使用相同的方法: Meteor
Mongoose 菜鸟问题:我有两个 Mongoose ObjectId 对象列表,我将它们合并为一个。有些 ObjectId 是重复的,我不想将它们保存到我的数据库中。是否有 Mongoose 工具
以下代码从供应商集合中的员工数组中提取员工 await new VendorManager() .update( { emplo
我有一个简单的模型对象: class UserRating include MongoMapper::EmbeddedDocument key :idea_id, ObjectId key
谁能告诉我使用 #[objectId] 或 [id=objectId] 引用元素有什么区别? 最佳答案 第一个非常快,因为 jQuery 内部使用 getElementById当它识别出模式时(使用正
我的架构是: var schema = new Schema({ players: { type: [Schema.Types.ObjectId]}); 我正在使用 promi
这似乎是这样定义我的架构: var PossessionSchema = new mongoose.Schema({ thing: {type: mongoose.Schema.Types.Obj
我想要解决的是:使用建议的方法(mapReduce)保留 $in 中的 Id 数组的顺序: Does MongoDB's $in clause guarantee order 我已经完成了我的作业,发
我是一名优秀的程序员,十分优秀!