MongoDB确定一条记录是否会通过findOne
MongoDB determine if a record would pass findOne
我想知道如何做下面的,而不是实际做DB查询。也就是说,我想知道如果"someData"会传递"where子句",而不把它放在一个表中,并要求它回来。例如,在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'
上面的查询从来没有真正接触到表——这是我的主要目标。
好的,所以我把这个问题带到MongoDB支持(10gen),并向他们征求意见。我想说的话似乎没有什么语法上的表达方式。他们的建议是使用一个单独的mongodb实例,尽可能靠近应用程序,并使用它只为了这个目的,避免任何潜在的减速,由于锁定等。
所以解决方案是:使一个新的MongoDB实例本地应用程序,并在那里运行这些查询。这是唯一的办法。
我将把这个问题留给任何能提供更好解决方案的人。好的,上面的Stennie(在评论中)提供了一些线索,我认为什么是这种情况的最佳答案。
他提供了下面的链接:什么Javascript库可以评估类似mongodb的查询谓词对对象?
这让我有了2个javascript库:1) Mingo - https://github.com/kofrasa/mingo
2)筛选——https://github.com/crcn/sift.js
Mingo的优势在于能够评估MongoDB的语法,而Sift似乎更完整。对于我的情况,明戈是完美的,正是我所寻找的。
(我不知道如何给Stennie这个答案的功劳,但它确实属于他)
相关文章:
- 访问布局信息是否也会导致浏览器重排
- 当包含另一个asp文件时,是否也包含所有引用的样式和脚本页面
- 如何检测是否有溢出
- jQuery中是否内置了任何字符串格式化函数
- 是否有任何snippet或jQuery插件可以列出easylist.txt模式匹配的DOM中的所有元素
- 测试索引值是否等于某个数字的倍数
- Fancybox是否将Click事件静音
- 主干-不管怎样,检查事件以前是否绑定过
- YUI3 IO实用程序是否可以根据给定的内容类型标头值自动序列化数据
- 是否有一个JS/jQuery函数可以获取某个类的每个元素的ID
- 节点是否需要模块传递带有方括号的arg?这是个错误吗
- 是否有任何方法可以使用jQuery替换在数组中定义值的文本
- 是否可以将一个函数输入连接到另一个函数调用的文本
- 是否可以禁用jquery中的单个单选按钮
- 是否可以从父类访问子类的属性
- 是否可以控制获取哪些Google地图脚本(JavaScript API)
- 如何让程序检查所选单词中是否有按键
- 用于检查数组中是否存在元素的javascript自定义方法
- 是否可以使find()和findOne()方法只返回模式字段
- MongoDB确定一条记录是否会通过findOne