gpt4 book ai didi

mongodb - 比较两个 MongoDB 集合之间的文档

转载 作者:IT老高 更新时间:2023-10-28 13:28:40 28 4
gpt4 key购买 nike

我有两个现有集合,需要根据两个现有集合之间的比较来填充第三个集合。

需要比较的两个集合具有以下架构:

// Settings collection:
{
"Identifier":"ABC123",
"C":"1",
"U":"V",
"Low":116,
"High":124,
"ImportLogId":1
}

// Data collection
{
"Identifier":"ABC123",
"C":"1",
"U":"V",
"Date":"11/6/2013 12AM",
"Value":128,
"ImportLogId": 1
}

总的来说,我是 MongoDB 和 NoSQL 的新手,所以我很难掌握如何做到这一点。 SQL 看起来像这样:

SELECT s.Identifier, r.ReadValue, r.U, r.C, r.Date
FROM Settings s
JOIN Reads r
ON s.Identifier = r.Identifier
AND s.C = r.C
AND s.U = r.U
WHERE (r.Value <= s.Low OR r.Value >= s.High)

在这种使用示例数据的情况下,我想返回一条记录,因为数据集合中的值大于设置集合中的高值。这是否可以使用 Mongo 查询或 map reduce,还是这种糟糕的集合结构(即,可能所有这些都应该在一个集合中)?

还有一些补充说明:Settings 集合实际上应该每个“标识符”只有 1 条记录。数据集合将有每个“标识符”的许多记录。此过程可能一次扫描数十万份文档,因此资源考虑有些重要

最佳答案

没有使用 MongoDB 执行此类操作的好方法。如果你想要 BAD 方式,你可以使用这样的代码:

db.settings.find().forEach(
function(doc) {
data = db.data.find({
Identifier: doc.Idendtifier,
C: doc.C,
U: doc.U,
$or: [{Value: {$lte: doc.Low}}, {Value: {$gte: doc.High}}]
}).toArray();
// Do what you need
}
)

但不要期望它的性能会与任何体面的 RDBMS 一样好。

您可以像这样从数据收集中重建架构并嵌入文档:

{
"_id" : ObjectId("527a7f4b07c17a1f8ad009d2"),
"Identifier" : "ABC123",
"C" : "1",
"U" : "V",
"Low" : 116,
"High" : 124,
"ImportLogId" : 1,
"Data" : [
{
"Date" : ISODate("2013-11-06T00:00:00Z"),
"Value" : 128
},
{
"Date" : ISODate("2013-10-09T00:00:00Z"),
"Value" : 99
}
]
}

如果嵌入文档的数量很少,它可能会起作用,但说实话,处理文档数组远非愉快的体验。更不用说随着 Data 数组大小的增加,您可以轻松达到文档大小限制。

如果这种操作对于您的应用程序来说是典型的,我会考虑使用不同的解决方案。尽管我很喜欢 MongoDB,但它只适用于某些类型的数据和访问模式。

关于mongodb - 比较两个 MongoDB 集合之间的文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19817275/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com