我想知道是否有办法在MongoDB的集合中获取数据(即文档)的最后更新/修改时间.更清楚的是,我想进行查询以检索在特定时间之后更新的所有文档.
是否有任何可能的方法来检索MongoDB中最后修改的时间戳?
注意:对于新创建的文档,我知道我们可以从objectId检索时间戳,但是对于更新,id将是相同的.MongoDB是否将每个文档的最后更新时间存储在任何地方?
我使用morphia作为java驱动程序,所以如果有任何可能的方式来自morphia,请告诉我.
我正在尝试将一个X?-GB大文件作为流发送到ActiveMQ队列进行处理.
我知道ActiveMQ 支持流,camel-jms也是如此,但是我尝试在队列上设置的东西似乎没什么区别.唯一改变的是关闭流缓存结果是一个"流关闭"异常.
我愿意使用处理器或自定义类(只要资源得到清理),但这应该可以从蓝图中获得.如何通过camel-activemq正确处理大文件而不会出现OutOfMemoryError?
运用
这是我的骆驼蓝图
<?xml version="1.0" encoding="UTF-8"?>
<blueprint
xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
xmlns:cm="http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.0.0"
<!-- just calls exchange.setBody(exchange.getBody(InputStream.class)) -->
<bean id="toStreamBody" class="my.test.toInputStream"/>
<!-- define a bean of type StreamCachingStrategy which CamelContext will automaticly use -->
<bean id="streamStrategy" class="org.apache.camel.impl.DefaultStreamCachingStrategy">
<property name="spoolDirectory" value="${java.io.tmpdir}TestTemp/#uuid#/"/>
<property name="spoolThreshold" value="131072"/>
<property name="spoolUsedHeapMemoryThreshold" value="70"/>
<property name="anySpoolRules" value="true"/>
</bean>
<!-- streamCaching="true" is "not a valid attribute" -->
<camelContext streamCache="true" xmlns="http://camel.apache.org/schema/blueprint">
<route id="file_route">
<from uri="file://FileUploadBin?delete=false&moveFailed=.error"/>
<!-- just calls exchange.setBody(exchange.getBody(InputStream.class)) -->
<bean ref="toStreamBody"/>
<to uri="activemq:queue:TestQ"/>
</route> …Run Code Online (Sandbox Code Playgroud) java activemq-classic inputstream apache-camel apache-servicemix
给出表单中的简单if语句
public static String test(boolean flag) {
if (!flag) {
return "no";
} else {
System.out.println("flag enabled");
}
return "yes";
}
Run Code Online (Sandbox Code Playgroud)
要么
public static String test(final boolean flag)
{
if (flag)
{
System.out.println("flag enabled");
return "yes";
}
else
{
return "no";
}
}
Run Code Online (Sandbox Code Playgroud)
Eclipse给了我警告,强调整个其他块
声明不必要地嵌套在else子句中.相应的then子句不能正常完成
但是,这......
public static String test(final boolean flag)
{
if (flag)
{
System.out.println("flag enabled");
return "yes";
}
return "no";
}
Run Code Online (Sandbox Code Playgroud)
没有发出警告.
这个问题似乎有关系,但我没有在第一个例子的其他地方使用return,否则最终没有.
我知道这只是一个偏好,它可以被关闭.但是,我不喜欢忽视事情只是因为我不明白是什么问题.而且我似乎找不到任何关于为什么Eclipse将其添加为可配置警告的文档.
总而言之,The corresponding then clause does not complete normally意味着什么?这个警告试图保护我的问题是什么?
所以,假设一个非常简单的图
(A)->(B)->(D)->(E) | (A)->(C)->(D)->(E)
<>-如果你想象一下,它会看起来像这样。
图中的关键节点是指如果将其删除,您现在将拥有 2 个图的节点。(又名单点故障)
因此,在此示例中,E 并不重要,因为它是叶子,B 和 C 并不重要,因为 A 和 D 仍然由另一个节点连接。不过 D 很重要,因为删除它会使 E 从图中的其余部分中孤立出来。
使用 Cypher,如何找到关键节点?(在本例中为 D)
我的第一直觉是采用所有路径,并计算每个节点被触摸的次数,但这将是非常低效且不可靠的。我的第二本能是类似的WHERE NONE (n in path WHERE NOT n in OTHER_PATHS),但即使我能弄清楚如何使其工作,我也不知道路径中的哪个节点是关键的。
我找到了这个博客,但它似乎假设您已经了解一些有关关键节点的信息。
我有两个测试查询
CREATE (a:TEST)
DELETE a
WITH a
WHERE a <> NULL
RETURN (a:TEST)
Run Code Online (Sandbox Code Playgroud)
哪个返回
Added 1 label, created 1 node, deleted 1 node, statement completed in 0 ms.
Run Code Online (Sandbox Code Playgroud)
和
CREATE (a:TEST)
DELETE a
WITH a
WHERE a IS NOT NULL
RETURN (a:TEST)
Run Code Online (Sandbox Code Playgroud)
哪个返回
Node with id 1738 has been deleted in this transaction
Run Code Online (Sandbox Code Playgroud)
根据文档,“<>”是不等运算符。所以我的理解是“a <> NULL”和“a IS NOT NULL”在Cypher中是等效的。至少,我希望“a IS NOT NULL”是更可靠的过滤器(因为它是它自己的专用比较运算符)。这看起来可能是在同一事务中创建和删除节点的边缘情况错误,但是 IS NOT NULL 的文档没有说任何超出(暗示)“它是一个运算符”的内容,因此这可能是故意的,如果有一种微妙的尊重。
那么为什么a <> NULL有效而a IS NOT NULL无效呢?又名,这两个比较之间有什么区别?
我正在使用 Cypher …
我想向离子推送通知添加一些操作按钮。我正在使用cordova pushv5。通知工作正常,但我不知道如何添加这些按钮。
如何添加这些按钮?
我在应用程序的关键路径中有这些代码
try
{
checked
{
values[i] = (int)(sample[i].Value * (double)magnitude));
}
} catch (OverflowException)
{
values[i] = int.MaxValue;
}
Run Code Online (Sandbox Code Playgroud)
但是,一旦幅度变得足够高(大约1.8 ish),此部分开始抛出像疯狂的OverflowExceptions并显着减慢我的应用程序.将此块更改为未选中可以解决问题,因此我知道这是问题所在.
如果溢出时有默认值,那么检查算法的最快/最便宜的方法是什么?
所以作为这个问题的复杂性,我基本上想做
MATCH (n:TEST) OPTIONAL MATCH (n)-[r]->() RETURN DISTINCT n, r
我想将 n 和 r 作为没有重复值的一列返回。然而,运行
MATCH (n:TEST) OPTIONAL MATCH (n)-[r]->() UNWIND n+r AS x RETURN DISTINCT x
给出“类型不匹配:预期列表但关系(第 1 行,第 47 列)”错误。而这个查询
MATCH (n:TEST) RETURN DISTINCT n UNION MATCH ()-[n]->() RETURN DISTINCT n
将节点和关系放在同一列中,但第一场比赛的上下文在下半场丢失。
那么如何将所有匹配的节点和关系作为一个最小列表返回?
更新:
这是我正在使用的答案查询的最终修改版本
MATCH (n:TEST)
OPTIONAL MATCH (n)-[r]->()
RETURN n {.*, rels:collect(r {properties:properties(r), id:id(r), type:type(r), startNode:id(startNode(r)), endNode:id(endNode(r))})} as n
我正在使用 Mongo java 驱动程序从 mongo 集合中检索数据。我有以下查询,我试图在 java 中实现:Json 是:
{
"_id" : ObjectId("56cd284767c74d3d4dd3ec80"),
"comments" : "Hello",
"statusLog" : [
{
"status" : "Submitted",
"startDate" : ISODate("2015-01-14T05:00:00.000Z"),
"endDate" : ISODate("2016-02-29T21:24:24.740Z")
},
{
"status" : "Active",
"startDate" : ISODate("2016-02-29T21:24:24.740Z")
}
],
"createdDate" : ISODate("2015-01-14T05:00:00.000Z")
}
Run Code Online (Sandbox Code Playgroud)
蒙戈查询:
db.CollectionName.find({},{_id: 0, createdDate:1, "statusLog": {$elemMatch: {"status":"Submitted"}}});
Run Code Online (Sandbox Code Playgroud)
这是我用java编写的查询(mongo java driver 3.4.2):
BasicDBObject query = new BasicDBObject(new BasicDBObject("statusLog",
new BasicDBObject("$elemMatch", new BasicDBObject("status", "Submitted"))));
Run Code Online (Sandbox Code Playgroud)
运行 java 代码会返回所有状态日志,而不是我正在查找的状态日志。
任何帮助将不胜感激。
基于这个类似的问题,我想要最高效的方式来处理这种情况。
MERGE (n1{id:<uuid>})
SET n1.topicID = <unique_name1>
IF (EXISTS((a:Topic{id:<unique_name1>})) | CREATE UNIQUE (n1)-[:HAS]->(a))
MERGE (n2{id:<uuid>})
SET n2.topicID = <unique_name2>
IF (EXISTS((a:Topic{id:<unique_name2>})) | CREATE UNIQUE (n2)-[:HAS]->(a))
Run Code Online (Sandbox Code Playgroud)
不幸的是,IF 不存在,并且 EXISTS 不能用于匹配或查找唯一节点。
我现在最好的解决方案是
MERGE (a:TEST{id:1})
WITH a
OPTIONAL MATCH (b:TEST{id:2})
// collect b so that there are no nulls, and rows aren't lost when no match
WITH a, collect(b) AS c
FOREACH(n IN c | CREATE UNIQUE …Run Code Online (Sandbox Code Playgroud) 我想从路径中删除一个节点,而不会危及原始路径节点.
这是我的测试数据库:
我想从路径中删除node(2),但我希望节点1,3,4和5在路径中保持链接.
有没有办法在一个查询中执行此操作?到目前为止,我有以下内容:
MATCH p = (:Connect)-[:to*]-(:Connect)
WITH nodes(p) AS connectNodes
UNWIND connectNodes AS connectNode
WITH distinct connectNode
WHERE connectNode.connectID = 2
DETACH DELETE (connectNode)
Run Code Online (Sandbox Code Playgroud)
这将删除节点2并取消链接路径
如何在没有节点2的情况下维护原始路径的节点之间的链接?
编辑:
我通过修改接受的答案的答案来解决它
//Make sure node (n) belongs to the path
MATCH (n:Connect {cID:2})-[:to*]-(:Connect {cID:5})
//get attached nodes, if any, ignoring directions
OPTIONAL MATCH (oa:connect)-[:to]-(n)-[:to]-(ob:connect)
//make sure nothing is duplicated
WHERE oa.cID <> ob.cID
//Use FOREACH to mimic if/else. Only merge oa to ob if they exist. Query fails without it
FOREACH …Run Code Online (Sandbox Code Playgroud) cypher ×5
neo4j ×5
java ×3
mongodb ×2
.net ×1
angular ×1
apache-camel ×1
c# ×1
cordova ×1
if-statement ×1
inputstream ×1
morphia ×1
path ×1