- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
使用 MongoDB 和 Mongoose,例如,我有以下架构:
var componentSchema = mongoose.Schema({
name : String,
price : Number
});
var partSchema = mongoose.Schema({
componentId : { type: Schema.Types.ObjectId, ref: 'Component' },
quantity : Number
});
var robotSchema = mongoose.Schema({
name : String,
type : Number,
parts : [partSchema]
});
每个机器人都需要构建一组组件。
由于机器人可能需要多个组件副本(例如 10 个 bolt 、5 个螺钉、1 个晶体管...),因此我们在机器人模型内存储一组部件,其中每个部件都包含对组件的引用以及一个附加字段、数量。
现在,我感兴趣的是,给定一组组件名称(或者最终给定一组组件ID),我可以使用这些类型的组件构建的所有机器人(请注意,组件不包括数量,我只是假设我有无限数量的这些组件),并按使用给定数组中最多组件的机器人排序。
Robot A: 2 bolts, 2 transistors
Robot B: 10 bolts, 2 capacitors, 3 bars of plutonium
Robot C: 5 bolts, 1 capacitor, 5 transistors
I have [bolts, capacitors, transistors].
Query results:
Robot C
Robot A
(In this order!)
是否可以使用复杂的 MongoDB 查询?
最佳答案
当然。您希望查找机器人文档,使得对于组件列表中的每个组件,信息中该组件的数量小于机器人文档中列出的数量,并且您的组件列表耗尽了机器人的组件列表。
// robot docs
{
"name" : "My Fun Robot v3",
"type" : 999,
"parts" : [
{ "_id" : 0, "quantity" : 2 },
{ "_id" : 1, "quantity" : 5 },
{ "_id" : 2, "quantity" : 1 },
{ "_id" : 3, "quantity" : 7 }
]
},
{
"name" : "My Pun Robot v1",
"type" : 222,
"parts" : [
{ "_id" : 4, "quantity" : 3 },
{ "_id" : 1, "quantity" : 4 },
{ "_id" : 2, "quantity" : 8 },
{ "_id" : 6, "quantity" : 1 }
]
},
{
"name" : "My Sun Robot v876",
"type" : 9834,
"parts" : [
{ "_id" : 0, "quantity" : 6 },
{ "_id" : 1, "quantity" : 400 },
{ "_id" : 2, "quantity" : 800 },
{ "_id" : 3, "quantity" : 1000 }
]
},
{
"name" : "My Gun Robot v0",
"type" : 1337,
"parts" : [
{ "_id" : 0, "quantity" : 1 },
{ "_id" : 1, "quantity" : 1 },
{ "_id" : 2, "quantity" : 1 },
]
}
和组件信息
\\ component info
var components = [
{ "_id" : 0, "quantity" : 20 },
{ "_id" : 1, "quantity" : 20 },
{ "_id" : 2, "quantity" : 20 },
{ "_id" : 3, "quantity" : 20 },
{ "_id" : 4, "quantity" : 20 }
]
查询的构造:
// for each component, we either need the component not to be required for the robot, or for the robot's quantity required to be less than the quantity we have
var query = {}
var comp_cond = []
components.forEach(function(comp) {
comp_cond.push({ "$or" : [{ "parts" : { "$elemMatch" : { "_id" : comp._id, "quantity" : { "$lte" : comp.quantity } } } }, { "parts._id" : { "$ne" : comp._id } } ]})
})
query["$and"] = comp_cond
// we need to make sure that there's no part in `parts` that's not in the components array
query["parts"] = { "$not" : { "$elemMatch" : { "_id" : { "$nin" : components.map(function(comp) { return comp._id }) } } } }
我不会显示上面示例的实际查询,因为它真的很长。您可以在 mongo shell 中运行代码并查看它。
> db.robots.find(query, { "_id" : 0, "name" : 1 })
{ "name" : "My Fun Robot v3" }
{ "name" : "My Gun Robot v0" }
我相信这是正确的结果。您应该进行更详尽的测试,以确保它能够处理组件列表与机器人零件列表无法匹配的所有方式。
关于node.js - 查找 MongoDB/Mongoose 中给定数组中包含子集合所有元素的特定字段的所有文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29643813/
我在 GlassFish (J2EE_1.4) 上的 NetBeans 中开发企业项目。我的项目中有一些实体 bean、一些 session bean 和消息驱动 bean。我以如下方式使用 serv
什么在速度方面更好...... 我正在尝试确定用户是否已将某个 URL 添加到他们的快捷方式列表中。如果他们添加了 URL,页面上就会有一个链接,用于从快捷方式中删除该页面,否则他们可以将其添加到快捷
我的问题如下: 我打开一个Excel-File,但我不知道我的客户在模板文件中使用了哪些可能的标头变量。它们可以是:#DATE,#TIME,#NAME等。因此,我需要查找这些变量,以及是否已使用过:替
我有一堆以“-e”结尾的文件要删除。 $ find . -name "*-e" exec rm {} \; find: exec: unknown primary or operator 正则表达式是
我有一个简单的问题:是否可以在 TypeScript 中获取联合的一部分的类型? 例如,您可以经常使用如下查找类型: interface Person { name: string; } type
我正在尝试设置 Point Cloud Library启用 CUDA 选项的主干构建。 我相信我已经按照 these instructions 正确安装了 CUDA . 在 PCL 构建的 cmake
我将首先说我所知道的唯一 VBA 是操作录制的宏的反复试验。我是一名注册会计师,试图以艰难的方式学习 VBA(并希望我去学校学习计算机编程!)。 我有带有多个工作表的大型工作簿。 G 列中以黄色突出显
当文件数达到阈值时,我试图删除目录中最旧的文件。 list_of_files = os.listdir('log') if len([name for name in list_of_files
我有一个数组,它有一些重复的值。 我必须计算每个重复项的数量及其索引。 打印如: Index of b: 1 Index of b: 4 Index of c: 2 Index of c: 3 Ind
我已经搜索了我的问题的解决方案,但没有成功。热键 ctrl+F 找到的 eclipse 查找/替换功能不起作用。注意:通过 Eclipse 菜单 Edit>Find Replace(不工作我的意思是
我想检查 div 是否包含类为“error”的子级,但条件是错误类显示不等于无。 (意味着错误类必须可见。 如何更改我的以下代码: $(".related_field").each(function
这个问题已经有答案了: 已关闭13 年前。 Possible Duplicate: Can jQuery provide the tag name? 嗨! 这个问题太基础了,我不好意思问,但我尝试了
我一直听说这是 cygwin 的路径问题。它阻止了 emacs 在我的 cygwin 中工作。当我在 cli(不是 bash/cygwin)上执行 find 时,无论我输入什么,我都会得到同样的错误。
我正在使用此变量来获取一个或多个与我需要的值相匹配的值。 var mail = $("#dat").contents().find("td:contains('" + name + "')" ).si
请原谅这个长问题。我只是不确定解决这个问题的最佳方法是什么。 我有一个电子表格(Google 表格),其中包含用户和地址列表,我需要从中创建邮寄标签。该电子表格是从我们的学生信息系统导出的。这些地址应
我正在 Excel VBA 中创建一个公式,以解析单元格中以逗号分隔的“部分”列表。在另一个工作表中查找具有该零件名称的单元格,然后使用找到的该单元格的地址来获取同一行不同列的零件成本。我为此工作了数
我被要求在网络应用程序上实现一些电子邮件地址验证 - 我确信我们都已经经历过一千次了...但是,这一次我被要求在域上进行 MX 查找查看它是否接受电子邮件。 有人知道这样做有任何潜在的问题吗? mx
我有一个切换按钮,可读取.wave文件,并且字符串更改为暂停,然后..... 我的问题是,当用户播放声音时,按钮字符串更改为暂停,结束声音后,该字符串仍为暂停状态,我想将其更改为播放。但是我不知道如何
对于令人困惑的标题提前表示歉意。我的问题如下,我在大约 600 个文件中有以下文本: $_REQUEST['FOO'] 我想将其替换为以下内容: $this->input->post('FOO') 为
我正在使用 Ansible 的查找功能查找 INI 文件中的值。这是文档中的示例: - debug: msg="User in integration is {{ lookup('ini', 'use
我是一名优秀的程序员,十分优秀!