导航:首页 > 净水问答 > 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过滤相关的资料

热点内容
污水处理项目属于什么项目工程 浏览:1
蚯蚓加工的污水怎么处理 浏览:268
湖北公共场所用净水机哪个好 浏览:492
高分子吸水树脂如何展示 浏览:65
污水管道测量报告 浏览:483
饮水机的水为什么不停 浏览:440
离子交换树脂洗不到中性 浏览:438
1万吨污水厂是什么规模 浏览:429
大货车空气滤芯灯亮怎么回事 浏览:41
滤芯ro膜上错了型号 浏览:732
花伞除垢小妙招 浏览:186
污水排污费收费标准 浏览:809
09款凯美瑞空调滤芯原装什么牌子 浏览:94
铃木跨骑摩托车怎么换空气滤芯器 浏览:766
石灰石湿法脱硫废水排放标准 浏览:13
棋牌室用什么饮水机 浏览:79
超低压反渗透膜压力 浏览:1
屯昌县城污水 浏览:602
磷脂油废水 浏览:452
21款CT6空调滤芯怎么换 浏览:172