我在我的集合中有这个结构:
{foo : 1, bar : 4, baz : {a : 1, b : 2 ,c : "fafofu"}}
Run Code Online (Sandbox Code Playgroud)
如何在baz中找到"a"和"b"?它不起作用db.my_collection.find({baz : {a : 1, b : 2});
我不在乎"c"是"fafofu"还是"cacocu"并不重要.
我必须在我的Mongo中找到一种"_id",我可以使用Mongo shell来实现它,而且我不能使用Perl API来做到这一点.
我正在努力(mongo shell):
./mongo
use my_db
db.my_collection.find({_id : ObjectId("4d2a0fae9e0a3b4b32f70000")})
Run Code Online (Sandbox Code Playgroud)
它有效!(返回),但我无法使用Perl API,
$mongo->my_db->my_collection(find({_id => "ObjectId(4d2a0fae9e0a3b4b32f70000"}));
Run Code Online (Sandbox Code Playgroud)
不起作用,因为"ObjectId"不是字符串,但如果你这样做,
./mongo
use my_db
db.my_collection.find({_id : "ObjectId(4d2a0fae9e0a3b4b32f70000)"})
Run Code Online (Sandbox Code Playgroud)
也不行,我猜Perl API正在做它^
现在,我必须知道我是如何做到的:
db.my_collection.find({_id : ObjectId("4d2a0fae9e0a3b4b32f70000")})
Run Code Online (Sandbox Code Playgroud)
使用Perl API.
我的数据框列之一中有以下字符串:
row1:[{"key":"foo"},{"key":"bar"},{"key":"baz"}]
row2:[{"key":"foo"},{"key":"bar"}]
row3:null
etc
Run Code Online (Sandbox Code Playgroud)
我发现 Spark 具有“get_json_object”功能。因此,如果我想使用 xpath 提取数据,我将使用:
get_json_object($"json", s"$[0].key")
Run Code Online (Sandbox Code Playgroud)
会返回:
"foo"
"foo"
null
Run Code Online (Sandbox Code Playgroud)
但我需要相当于 Spark 的“爆炸”功能。
我发现我可以在 xpath 上使用“*”符号。
get_json_object($"json", s"$[*].key")
Run Code Online (Sandbox Code Playgroud)
哪个不按预期执行,它将创建一个字符串,如:
[foo,bar,baz]
[foo,baz]
Run Code Online (Sandbox Code Playgroud)
我在另一个 stackoverflow 线程中找到了解决方案,
val jsonElements = (0 until 3).map(i => get_json_object($"json", s"$$[$i].key"))
val jsonElements = .map(i => get_json_object($"json", s"$$[$i].key"))
df.select($"id",explode(array(jsonElements: _*).alias("foo")))
Run Code Online (Sandbox Code Playgroud)
这部分解决了我的问题,因为这个解决方案假定我知道我的阵列的最大深度。Spark 的函数“from_json”需要模式,我有巨大的复杂 JSON 类型需要“无限”的时间来创建模式。
免责声明
我不会使用任何正则表达式/子字符串/等来解析 JSON。使用解析器的整个建议就是这样。
我正在使用WPE PRO,我可以捕获数据包并将其发回.我尝试使用WinSock 2(WPE PRO使用的相同的lib),但我不知道如何将数据包发送到现有的TCP连接,如WPE PRO.
http://wpepro.net/index.php?categoryid=2
我该怎么做 ?