導航:首頁 > 凈水問答 > mongodblookup過濾

mongodblookup過濾

發布時間:2022-04-21 13:25:02

A. angular js 怎麼直接讀取mongodb

angularjs讀取json中的某個欄位的方法是利用json的api實現的。
思路:先把js字元串轉化成json結構,然後利用取屬性運算符獲取各個屬性。
1、例如有以下json數據:
var data = {
"resultList": [
"{\"lookupKey\":2,\"clientKey\":1,\"codeName\":\"Application.AppType\",\"codeValue\":\"ApplicationType2\",\"codeDesc\":\"##\",\"updatedBy\":null,\"internalCodeName\":\"Application.AppType\"}",
"{\"lookupKey\":3,\"clientKey\":1,\"codeName\":\"Application.Class\",\"codeValue\":\"Tier 1\",\"codeDesc\":\"Critical Application requiring immediate response in case of a disruption of Service\",\"updatedBy\":null,\"internalCodeName\":\"Application.Class\"}"
]
};

2、利用angular.fromJson解析代碼如下:
$scope.result = [
angular.fromJson(data.resultList[0]),
angular.fromJson(data.resultList[1])
];
alert($scope.result[0].codeName);
結果是:Application.Class
3、這樣就獲取到了json字元串中的codeName的值。

B. MongoDB和PostGIS的Geohash是怎麼計算的

Geohash的最簡單的解釋就是:將一個經緯度信息,轉換成一個可以排序,可以比較的字元串編碼

import java.io.File;
import java.io.FileInputStream;
import java.util.BitSet;
import java.util.HashMap;

public class Geohash {

private static int numbits = 6 * 5;
final static char[] digits = { '0', '1', '2', '3', '4', '5', '6', '7', '8',
'9', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'j', 'k', 'm', 'n', 'p',
'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z' };

final static HashMap<Character, Integer> lookup = new HashMap<Character, Integer>();
static {
int i = 0;
for (char c : digits)
lookup.put(c, i++);
}

public static void main(String[] args) throws Exception{

System.out.println(new Geohash().encode(45, 125));

}

public double[] decode(String geohash) {
StringBuilder buffer = new StringBuilder();
for (char c : geohash.toCharArray()) {

int i = lookup.get(c) + 32;
buffer.append( Integer.toString(i, 2).substring(1) );
}

BitSet lonset = new BitSet();
BitSet latset = new BitSet();

//even bits
int j =0;
for (int i=0; i< numbits*2;i+=2) {
boolean isSet = false;
if ( i < buffer.length() )
isSet = buffer.charAt(i) == '1';
lonset.set(j++, isSet);
}

//odd bits
j=0;
for (int i=1; i< numbits*2;i+=2) {
boolean isSet = false;
if ( i < buffer.length() )
isSet = buffer.charAt(i) == '1';
latset.set(j++, isSet);
}

double lon = decode(lonset, -180, 180);
double lat = decode(latset, -90, 90);

return new double[] {lat, lon};
}

private double decode(BitSet bs, double floor, double ceiling) {
double mid = 0;
for (int i=0; i<bs.length(); i++) {
mid = (floor + ceiling) / 2;
if (bs.get(i))
floor = mid;
else
ceiling = mid;
}
return mid;
}

public String encode(double lat, double lon) {
BitSet latbits = getBits(lat, -90, 90);
BitSet lonbits = getBits(lon, -180, 180);
StringBuilder buffer = new StringBuilder();
for (int i = 0; i < numbits; i++) {
buffer.append( (lonbits.get(i))?'1':'0');
buffer.append( (latbits.get(i))?'1':'0');
}
return base32(Long.parseLong(buffer.toString(), 2));
}

private BitSet getBits(double lat, double floor, double ceiling) {
BitSet buffer = new BitSet(numbits);
for (int i = 0; i < numbits; i++) {
double mid = (floor + ceiling) / 2;
if (lat >= mid) {
buffer.set(i);
floor = mid;
} else {
ceiling = mid;
}
}
return buffer;
}

public static String base32(long i) {
char[] buf = new char[65];
int charPos = 64;
boolean negative = (i < 0);
if (!negative)
i = -i;
while (i <= -32) {
buf[charPos--] = digits[(int) (-(i % 32))];
i /= 32;
}
buf[charPos] = digits[(int) (-i)];

if (negative)
buf[--charPos] = '-';
return new String(buf, charPos, (65 - charPos));
}

}
import java.io.File;
import java.io.FileInputStream;
import java.util.BitSet;
import java.util.HashMap;

public class Geohash {

private static int numbits = 6 * 5;
final static char[] digits = { '0', '1', '2', '3', '4', '5', '6', '7', '8',
'9', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'j', 'k', 'm', 'n', 'p',
'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z' };

final static HashMap<Character, Integer> lookup = new HashMap<Character, Integer>();
static {
int i = 0;
for (char c : digits)
lookup.put(c, i++);
}

public static void main(String[] args) throws Exception{

System.out.println(new Geohash().encode(45, 125));

}

public double[] decode(String geohash) {
StringBuilder buffer = new StringBuilder();
for (char c : geohash.toCharArray()) {

int i = lookup.get(c) + 32;
buffer.append( Integer.toString(i, 2).substring(1) );
}

BitSet lonset = new BitSet();
BitSet latset = new BitSet();

//even bits
int j =0;
for (int i=0; i< numbits*2;i+=2) {
boolean isSet = false;
if ( i < buffer.length() )
isSet = buffer.charAt(i) == '1';
lonset.set(j++, isSet);
}

//odd bits
j=0;
for (int i=1; i< numbits*2;i+=2) {
boolean isSet = false;
if ( i < buffer.length() )
isSet = buffer.charAt(i) == '1';
latset.set(j++, isSet);
}

double lon = decode(lonset, -180, 180);
double lat = decode(latset, -90, 90);

return new double[] {lat, lon};
}

private double decode(BitSet bs, double floor, double ceiling) {
double mid = 0;
for (int i=0; i<bs.length(); i++) {
mid = (floor + ceiling) / 2;
if (bs.get(i))
floor = mid;
else
ceiling = mid;
}
return mid;
}

public String encode(double lat, double lon) {
BitSet latbits = getBits(lat, -90, 90);
BitSet lonbits = getBits(lon, -180, 180);
StringBuilder buffer = new StringBuilder();
for (int i = 0; i < numbits; i++) {
buffer.append( (lonbits.get(i))?'1':'0');
buffer.append( (latbits.get(i))?'1':'0');
}
return base32(Long.parseLong(buffer.toString(), 2));
}

private BitSet getBits(double lat, double floor, double ceiling) {
BitSet buffer = new BitSet(numbits);
for (int i = 0; i < numbits; i++) {
double mid = (floor + ceiling) / 2;
if (lat >= mid) {
buffer.set(i);
floor = mid;
} else {
ceiling = mid;
}
}
return buffer;
}

public static String base32(long i) {
char[] buf = new char[65];
int charPos = 64;
boolean negative = (i < 0);
if (!negative)
i = -i;
while (i <= -32) {
buf[charPos--] = digits[(int) (-(i % 32))];
i /= 32;
}
buf[charPos] = digits[(int) (-i)];

if (negative)
buf[--charPos] = '-';
return new String(buf, charPos, (65 - charPos));
}

}

C. Java RMI調用遠程程序拋出異常

背景要求:定時監控遠程主機上mongodb資料庫內存使用的情況,當內存使用過大時暫停邏輯處理線程後啟動內存空間的釋放處理線程,釋放完成後再啟動邏輯處理線程。
操作系統:CentOS 64bit (Linux)
步驟(代碼省略):
1.創建Socket遠程伺服器
2.創建客戶端
配置:
#查找對象stub埠
RMI_PORT=9902
#服務埠
RMI_SERV_RMI_PORT=9903
#注冊服務地址埠要和查找對象stub埠一致
RMI_URL=rmi://192.168.0.118:9902/MongoServer
#綁定IP
RMI_IP=192.168.0.118
#檢查內存shell
RMI_MEMQUERY_COMMAND=sh /home/test/BI/smartshow14/MongoDBRMIServer/memquery.sh
#釋放內存shell
RMI_MEMFREE_COMMAND=sh /home/test/BI/smartshow14/MongoDBRMIServer/memclear.sh
#釋放內存容量閥值,單位M
RMI_MEM_CAPACITY_LIMIT=3000
3.啟動伺服器
客戶端線程通過 rmi://192.168.0.118:9902/MongoServer 訪問時出現異常:
--定時掃描MONGODB內存線程--:開始運行!
java.rmi.UnmarshalException: error unmarshalling return; nested exception is:
java.lang.ClassNotFoundException: com.linkage.iface.IMongoDBScan (no security manager: RMI class loader disabled)
at sun.rmi.registry.RegistryImpl_Stub.lookup(Unknown Source)
at java.rmi.Naming.lookup(Naming.java:84)
at com.linkage.querytool.QueryRMICaller.ramCapacityScan(QueryRMICaller.java:87)
at com.linkage.querytool.MongoDBARMScanThread$TimerWorkTask.run(MongoDBARMScanThread.java:94)
at java.util.TimerThread.mainLoop(Timer.java:512)
at java.util.TimerThread.run(Timer.java:462)
Caused by: java.lang.ClassNotFoundException: com.linkage.iface.IMongoDBScan (no security manager: RMI class loader disabled)
at sun.rmi.server.LoaderHandler.loadProxyClass(LoaderHandler.java:535)
at java.rmi.server.RMIClassLoader$2.loadProxyClass(RMIClassLoader.java:628)
at java.rmi.server.RMIClassLoader.loadProxyClass(RMIClassLoader.java:294)
at sun.rmi.server.MarshalInputStream.resolveProxyClass(MarshalInputStream.java:238)
at java.io.ObjectInputStream.readProxyDesc(ObjectInputStream.java:1530)
at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1492)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1731)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1328)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:350)
... 6 more
--定時掃描MONGODB內存線程--:處理結束!
=======================================================================================================
--定時掃描MONGODB內存線程--:開始運行!
java.security.AccessControlException: access denied (java.net.SocketPermission 192.168.0.118:9902 connect,resolve)
at java.security.AccessControlContext.checkPermission(AccessControlContext.java:374)
at java.security.AccessController.checkPermission(AccessController.java:546)
at java.lang.SecurityManager.checkPermission(SecurityManager.java:532)
at java.lang.SecurityManager.checkConnect(SecurityManager.java:1034)
at java.net.Socket.connect(Socket.java:524)
at java.net.Socket.connect(Socket.java:478)
at java.net.Socket.<init>(Socket.java:375)
at java.net.Socket.<init>(Socket.java:189)
at sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket(RMIDirectSocketFactory.java:22)
at sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket(RMIMasterSocketFactory.java:128)
at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:595)
at sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:198)
at sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:184)
at sun.rmi.server.UnicastRef.newCall(UnicastRef.java:322)
at sun.rmi.registry.RegistryImpl_Stub.lookup(Unknown Source)
at java.rmi.Naming.lookup(Naming.java:84)
at com.linkage.querytool.QueryRMICaller.ramCapacityScan(QueryRMICaller.java:89)
at com.linkage.querytool.MongoDBARMScanThread$TimerWorkTask.run(MongoDBARMScanThread.java:94)
at java.util.TimerThread.mainLoop(Timer.java:512)
at java.util.TimerThread.run(Timer.java:462)
--定時掃描MONGODB內存線程--:處理結束!
============================================================================================================
--定時掃描MONGODB內存線程--:開始運行!
java.security.AccessControlException: access denied (java.lang.RuntimePermission createSecurityManager)
at java.security.AccessControlContext.checkPermission(AccessControlContext.java:374)
at java.security.AccessController.checkPermission(AccessController.java:546)
at java.lang.SecurityManager.checkPermission(SecurityManager.java:532)
at java.lang.SecurityManager.<init>(SecurityManager.java:282)
at java.rmi.RMISecurityManager.<init>(RMISecurityManager.java:45)
at com.linkage.querytool.QueryRMICaller.ramCapacityScan(QueryRMICaller.java:88)
at com.linkage.querytool.MongoDBARMScanThread$TimerWorkTask.run(MongoDBARMScanThread.java:94)
at java.util.TimerThread.mainLoop(Timer.java:512)
at java.util.TimerThread.run(Timer.java:462)
--定時掃描MONGODB內存線程--:處理結束!

==========================================================================================================
以上異常都有可能出現,通過以下方式可解除問題:
1.在客戶端程序前打開安全管理器:
try {
System.setSecurityManager(new java.rmi.RMISecurityManager());
mds = (IMongoDBScan) Naming.lookup(urlStr);
} catch (MalformedURLException e) {
//..........
}
2.修改/usr/java/jdk1.6.0_21/jre/lib/security/java.policy後重啟
grant {
permission java.security.AllPermission;
}

D. mongodb lookup 是內連接還是外連接

不知道你用什麼語言連接mongodb,以下是用mongo的shell打開資料庫:
#創建一個庫:
use mytest
#添加一個用戶account,pwd
db.addUser("wangming","1234")
#查看當前庫中的用戶
db.system.users.find()
#連接時候通過auth命令進行連接(account,pwd)
db.auth("wangming","1234")
如果是用pymongo連接mongo,如下
#連接mongodb服務
con = MongoClient(host,port)
#選擇資料庫
db = con[dbname]
#用用戶名登陸
db.authenticate(account, pwd)
mongodb還是挺好用的,祝你快速上手。

E. 下面的sql語句對應的MongoDB語句該怎麼寫

創建表插入數據

create table a(序號 int,單位 varchar(10),工作 varchar(10),得分 int,打分 varchar(10)) insert into a values (1,'財務','gz1',100,'黎明')insert into a values (2,'財務','gz2',90,'黎明')insert into a values (3,'財務','gz3',80,'黎明')insert into a values (4,'銷售','gz4',70,'黎明')insert into a values (5,'銷售','gz5',60,'黎明')insert into a values (6,'銷售','gz6',50,'黎明')insert into a values (7,'人事','gz7',40,'黎明')insert into a values (8,'人事','gz8',30,'黎明')insert into a values (9,'人事','gz9',20,'黎明')insert into a values (10,'財務','gz1',88,'趙一')insert into a values (11,'財務','gz2',86,'趙一')insert into a values (12,'財務','gz3',78,'趙一')insert into a values (13,'銷售','gz4',90,'趙一')insert into a values (14,'銷售','gz5',64,'趙一')insert into a values (15,'銷售','gz6',85,'趙一')insert into a values (16,'人事','gz7',90,'趙一')insert into a values (17,'人事','gz8',43,'趙一')insert into a values (18,'人事','gz9',68,'趙一')

執行:

select 單位,工作,sum(case when 打分='黎明' then 得分 else 0 end) 黎明,sum(case when 打分='趙一' then 得分 else 0 end) 趙一from a group by 單位,工作

結果:

F. kettle的mongodb輸入多個欄位想加

因為多表關聯上發揮作用。
MongoDB是一個文檔型、無模式的資料庫,自然就很難在關系型資料庫中非常擅長的多表關聯上發揮作用。盡管後來版本MongoDB增加了$lookup支持單欄位關聯,但對兩個或兩個以上的欄位關聯的需求有點不足。

G. mongodb 合並集合

mongodb是不支持join操作的,所以只能去到程序裡面合並。
看上去你這個數據是一對一的,如果是.net的話,使用linq會非常方便,數據量不大的話使用循環組合也很簡單

H. MongoDB populate能這樣關聯嗎

$lookup似乎是你要找的功能。看一下文檔中的例子,挺直觀的。不過要注意一點from不能是分片集。
除此之外還有一個選擇是dbref,雖然跟你題中的數據結構不完全一樣,稍加修改也是可選的方式之一。區別在於dbref需要一次額外的查詢才能找到連接的數據,並且是1對1的關系。效率差,但不受分片的限制。根據需要選擇。

I. Notes 中的dblookup以及dbcolumn如何理解,請知道的大神講詳細點兒,初學LS菜鳥。。。非常感謝

DbLookup 搜索過濾後再獲取列值或欄位值;
DbColumn 直接獲取列值;
1、@DbColumn(class:cache;server:database;view;columnNumber)
獲取視圖(或文件夾)的某一列所有值。 (這一列有什麼值就返回什麼值,所以注意返回值可能會超界,32K)

2、@DbLookup(class:cache; server : database ; view ; key ; fieldName ; keywords ) or @DbLookup( class : cache ; server : database ; view ; key ; columnNumber ; keywords)
根據關鍵字去搜索視圖(或文件夾)第一列,獲取某一列或文檔中的某一個欄位。 注意:視圖第一列必須是排序的。

J. thinkphp6 版本 mongodb 連表查詢 案例

# https://www.cnblogs.com/cangqinglang/p/14858131.html
public function index(){

// 方法1 您可以使用 $toObjectId聚合實現此目的,該聚合僅將字元串ID轉換為mongoose objectId
// https://blog.csdn.net/az9996/article/details/110141289
// 多表查詢 https://blog.csdn.net/eric_to/article/details/90093806

$pipeline = [
['$addFields'=>['company_id'=>['$toObjectId'=>'$company_id']]],
['$match'=>['$expr'=>['$eq'=>["\$company_id", "$\$company_Id"]]]],
];
$pipelines = [
// ['$match'=>["_id"=>new \MongoDB\BSON\ObjectId("5cb7e580a6c98abc468b458b")]],
// ['$match'=>["name"=>"xxx限公司"]],
[
'$lookup'=>[
'from'=>'oa_company_member_pay',
"let"=>["company_Id"=>"\$_id" ],
"pipeline"=>$pipeline,
'as'=>'company_pay'
],
]
];
// php 執行 產生了 2571 條數據 但是 用 db.runCommand() 執行 列印的 sql 語句 只有 101 條記錄
mp(Db::connect('mongo')->name('oa_company')->cmd([
'aggregate'=>'oa_company',
'pipeline'=>$pipelines,
'explain'=>false,
]));

mp(Db::connect('mongo')->getLastSql());

// 以下 mongodb sql 在 資料庫 查詢 通過 有 2571 條記錄
// db.getCollection("oa_company").aggregate([
// {
// "$lookup": {
// "from": "oa_company_member_pay",
// "let": { "company_Id": "$_id" },
// "pipeline": [
// { '$addFields': { "company_id": { "$toObjectId": "$company_id" }}},
// { "$match": { "$expr": { "$eq": [ "$company_id", "$$company_Id" ] } } }
// ],
// "as": "company_member_pay"
// }
// }
// ])
// 以下 mongodb sql 在 資料庫 查詢 通過 只有 101 條記錄
// db.runCommand({
// "aggregate":"oa_company",
// "pipeline":[
// {
// "$lookup":{
// "from": "oa_company_member_pay",
// "let": { "company_Id": "$_id" },
// "pipeline": [
// { '$addFields': { "company_id": { "$toObjectId": "$company_id" }}},
// { "$match": { "$expr": { "$eq": [ "$company_id", "$$company_Id" ] } } }
// ],
// "as": "company_member_pay"
// }

// }
// ],
// "explain":false
// })

// 方法2 或者使用$toString聚合 可以通過 2571

// db.getCollection('oa_company').aggregate([
// { "$addFields": { "companyidStr": { "$toString": "$_id" }}},
// { "$lookup": {
// "from": "oa_company_member_pay",
// "localField": "companyidStr",
// "foreignField": "company_id",
// "as": "pay"
// }}
// ])
/*
$pipelines = [
// ['$match'=>["_id"=>new \MongoDB\BSON\ObjectId("5cb7e580a6c98abc468b458b")]],
// ['$match'=>["name"=>"xxx有限公司"]],
['$addFields'=>['companyidStr'=>['$toString'=>'$_id']]],
[
'$lookup'=>[
'from'=>'oa_company_member_pay',
'localField'=>'companyidStr',
'foreignField'=>'company_id',
'as'=>'company_pay'
],
]
];
// php 執行 產生了 2571 條數據 但是 用 db.runCommand() 執行 列印的 sql 語句 只有 101 條記錄
mp(Db::connect('mongo')->name('oa_company')->cmd([
'aggregate'=>'oa_company',
'pipeline'=>$pipelines,
'explain'=>false,
]));

mp(Db::connect('mongo')->getLastSql());

// db.cmd({"aggregate":"oa_company","pipeline":[{"$addFields":{"companyidStr":{"$toString":"$_id"}}},{"$lookup":{"from":"oa_company_member_pay","localField":"companyidStr","foreignField":"company_id","as":"company_pay"}}],"explain":false});

// 下面 執行 不可以 只有 101 條數據
db.runCommand({"aggregate":"oa_company","pipeline":[{"$addFields":{"companyidStr":{"$toString":"$_id"}}},{"$lookup":{"from":"oa_company_member_pay","localField":"companyidStr","foreignField":"company_id","as":"company_pay"}}],"explain":false});

*/

}

閱讀全文

與mongodblookup過濾相關的資料

熱點內容
化妝品工廠的污水處理 瀏覽:298
魚缸放鹽放到過濾槽 瀏覽:96
什麼品牌凈化器除甲醛效果最好 瀏覽:901
樹脂三乙醇胺硬度 瀏覽:270
燈達樹脂砂輪 瀏覽:296
泰克馬污水提升器無錫 瀏覽:926
水性熱塑性樹脂耐化性 瀏覽:779
史密斯凈化器怎麼重置濾芯 瀏覽:211
濟源年產18萬噸污水處理劑 瀏覽:328
廁所飲水機漏水什麼情況 瀏覽:127
反滲透凈水器如何接燒水壺 瀏覽:262
飲水機為什麼不過濾水 瀏覽:416
海曙污水管道養護單位 瀏覽:431
霧化吸入加入蒸餾水 瀏覽:1
廈門超標排放污水量處罰辦法 瀏覽:782
伊濱區污水處理廠地址 瀏覽:661
純水機進水電磁閥為什麼24v不到位 瀏覽:790
惠而浦直飲凈水機多少錢 瀏覽:40
鍍鉻後的廢水處理最方便 瀏覽:851
既熱式飲水機怎麼裝前置過濾器 瀏覽:585