我想知道如何在不实际执行数据库查询的情况下执行以下操作。即我想知道“someData”是否会传递“whereClause”而不将其放入表中并再次要求它返回。即在findOne中运行逻辑,不需要插入和选择的开销。只是为了让它变得更有趣,请考虑我需要让它保持线程安全,这就是为什么我在下面弄乱Guid有点事情。另外请注意where子句可能会比下面更复杂,如{a: {$ ne:1}}
鉴于来源:
someData = { a: 1, b: 2 };
whereClause = { b: 2 };
我的代码需要修复:
someData.GUID = ObjectId();
// DB QUERY - insert
db.workspace.insert(someData);
whereClause.GUID = inputsValues.GUID;
// Check if the data passes the whereClause
// DB QUERY - findOne
var whereResult = db.workspace.findOne(whereClause);
// DB QUERY - remove
db.workspace.remove({ "GUID": whereClause.GUID });
if (whereResult == null)
alert("Fail");
else
alert("Pass");
在SQL中我想要的东西可以表达如下:(伪语法)
if (
Select Count(*) from ((Select 1 as A, 2 as B) Data where B = 2) Result
) = 1 then 'pass' else 'fail'
以上查询实际上从未触及过表格 - 这是我的主要目标。
答案 0 :(得分:0)
好的,我把这个问题带到MongoDB支持(10gen),并向他们征求意见。似乎没有句法说出我想说的话。他们的建议是使用一个单独的mongodb实例尽可能靠近应用程序,并将其用于此目的,以避免由于锁定等导致的任何潜在减速。
所以解决方案是:在应用程序本地创建一个新的MongoDB实例,并在那里运行这些查询。这将是唯一的方法。
我会向任何可以提供更好解决方案的人开放这个问题。
答案 1 :(得分:0)
好的,上面的Stennie(在评论中)提供了我认为对这种情况最好的答案的线索。
他提供了以下链接: what Javascript library can evaluate MongoDB-like query predicates against an object?
这让我有了2个javascript库:
1)Mingo - https://github.com/kofrasa/mingo
2)筛选 - https://github.com/crcn/sift.js
Mingo具有能够评估MongoDB语法的优势,其中Sift似乎更完整。对于我的情况,明戈是完美的,正是我所寻找的。 p>
(我不知道如何给Stennie这个答案,但它真的属于他)