首页 > 解决方案 > 从 mongodb 中选择每列都有不同架构的数据

问题描述

我有 mongodb 从防火墙接收数据,这个防火墙根据它所拥有的日志向 mongo 发送不同的数据,所以我的 mongo 集合有不同的记录,例如它有这样的记录

“1574957770”、“SendPkts”:“1”、“SendBytes”:“142”、“RcvPkts”:“0”、“RcvBytes”:“0”、“SourceVpnID”:“0”、“DestinationVpnID”:“0” ”、“SourceZone”:“隧道”、“DestinationZone”:“信任”、“PolicyName”:“tunnel_to_trust”、“CloseReason”:“过期”、“ApplicationName”:“SNMP”。} “1574957770”、“SendPkts”:“1”、“SendBytes”:“142”、“RcvPkts”:“0”、“RcvBytes”:“0”、“SourceVpnID”:“0”、“DestinationVpnID”:“0” ”、“SourceZone”:“隧道”、“DestinationZone”:“信任”、“PolicyName”:“tunnel_to_trust”、“CloseReason”:“过期”、“ApplicationName”:“SNMP”。}

还有这样的记录

{“_id”:ObjectId(“5df2194d2d81db5e845586d1”),“sys”:“2019-11-28”,“time”:ISODate(“2019-11-28T16:18:13.126Z”),“time_rcvd”:ISODate( “2019-11-28T16:18:13.126Z”),“msg”:“”,“syslog_fac”:23,“syslog_sever”:6,“syslog_tag”:“16:”,“procid”:“16”, “pid”:“-”,“level”:“INFO”,“logtype”:“URL LOGS”,“time2”:“Thu, 28 Nov 2019 16:18:13 +0000”,“18:12KayseriNetcom%% 01SECLOG/6/SESSION_TEARDOWN(l):IPVer":"4","协议":"icmp","国家":"10.10.0.26","DestinationIP":"10.10.0.26","SourcePort":"8”,“DestinationPort”:“0”,“BeginTime”:“1574957867”,“EndTime”:“1574957867”,“SendPkts”:“1”,“SendBytes”:“60”,“RcvPkts”:“0” ,“RcvBytes”:“0”,“SourceVpnID”:“0”,“DestinationVpnID”:“0”,“SourceZone”:“隧道”,“DestinationZone”:“信任”,“PolicyName”:“tunnel_to_trust”,“ CloseReason" : "老化。" }RcvBytes”:“0”,“SourceVpnID”:“0”,“DestinationVpnID”:“0”,“SourceZone”:“隧道”,“DestinationZone”:“信任”,“PolicyName”:“tunnel_to_trust”,“CloseReason” :“过时了。”}RcvBytes”:“0”,“SourceVpnID”:“0”,“DestinationVpnID”:“0”,“SourceZone”:“隧道”,“DestinationZone”:“信任”,“PolicyName”:“tunnel_to_trust”,“CloseReason” :“过时了。”}

所以第一条记录有 ApplicationName 列,但第二条记录没有该列所以当我尝试通过此代码使用 Laravel 选择 ApplicationName 时

$datas = Logss::select('ApplicationName')->offset(1)->limit( 10)->get()->toArray();

我收到此错误,因为第二行中没有 ApplicationName

未定义索引:ApplicationName

那么我该如何解决这个问题

标签: laravelmongodb

解决方案


如果您使用 jenssegers/laravel-mongodb 模块(https://github.com/jenssegers/laravel-mongodb)。

然后它有一个选项来检查是否匹配具有指定字段的文档。

你可以在下面使用这样的东西:-

Logss::where('ApplicationName', 'exists', true)->get();

推荐阅读