我正在将客户端的软件数据库从Oracle迁移到PostgreSQL,我在理解查询,它做了什么以及如何迁移它时遇到了一些麻烦.
查询是:
SELECT *
FROM TBL1, TBL2, TBL3, TBL4
WHERE TBL3.Project_ID = TBL1.Project_ID
AND TBL2.Type_ID = TBL1.Type_ID
AND TBL4.PROPERTY_NAME(+)='Id'
AND TBL4.Entity_ID(+)=TBL1.Entity_ID
Run Code Online (Sandbox Code Playgroud)
而我得不到的部分是'Id'上的外连接(+).表上的连接,OK,但是在字符串上?我不知道它做了什么.
有人有想法吗?谢谢.
我所处的情况是,我有一个静态列表缓存一些引用。由于这是一个静态列表,我想使用 WeakReference,这样我就不会无用地将对象保留在内存中。
我认为问题是其中一个引用是匿名类。我担心的是,如果我将匿名类存储为 WeakReference,它可能会很快被收集,而如果我将匿名类存储为强引用,它将保存对构造匿名类的类的引用。
不知道我的解释是否清楚,所以这里是一段代码:
public interface Callback {
void call();
}
public class A {
public void doIt() {
B.register(this, new Callback() {
public void call() {
// do something
}
});
}
}
public class B {
private static final List<Item> ITEMS = new LinkedList<>();
public static void register(Object key, Callback callback) {
Item item = new Item();
item.key = new WeakReference<>(key);
// ??
item.callback = new WeakReference<>(callback);
ITEMS.add(item);
}
private static class Item {
private WeakReference<Object> key; …Run Code Online (Sandbox Code Playgroud) 编辑:问题解决了,见下文.
我有以下文件:
db.clients.insert({
_id: ObjectId("524d720d8d3ea014a52e95bb"),
company: "Example",
logins: [
{
"name": "John Smith",
"username": "test",
"password": "eF9wnBEys0OzL5vmR/OHGCaekHiw/Miy+XvbDdayxeo=",
"email": "a@a.com",
"last": null,
"roles": ["CONFIG"]
},
{
"name": "Guest",
"username": "guest",
"password": "K/gYODb7XPo0erySvL276DyPi4+stPPK4jM3pJ8aaVg=",
"email": "a@a.com",
"last": null,
"roles": []
}
]
});
Run Code Online (Sandbox Code Playgroud)
现在,我想使用此文档对我的客户进行身份验证.但是,我不想检索每个子登录,我只想要匹配的那个.
这就是我使用聚合的原因:
db.clients.aggregate(
{
"$project": {
"login": "$logins",
"_id": 0
}
},
{
"$unwind": "$login"
},
{
"$group": {
"_id": "$login.username",
"login": {
"$first": "$login"
}
}
},
{
"$match": {
"login.username": "test",
"login.password": "eF9wnBEys0OzL5vmR/OHGCaekHiw/Miy+XvbDdayxeo=",
}
}
);
Run Code Online (Sandbox Code Playgroud)
哪个工作正常,给我:
{ …Run Code Online (Sandbox Code Playgroud)