如何从特定的操作系统过滤mongodb上的进程

时间:2019-03-19 16:50:17

标签: mongodb mongodb-query

您好,想搜索一下mongo的当前流程, 我只想获取特定操作系统执行的过程。通过示例Windows。

在下面运行查询

db.aggregate( [
    { $currentOp : { allUsers: true, localOps: true } },
    { $match: {  shard : 'shard-1' }}
 ])

我得到了一个很大的json结果。我需要过滤更多属性

我知道OS的信息。我可以从具有$client结果的command属性的属性json中获得

"command": {

        "$client": {
            "driver": {
                "name": "nodejs",
                "version": "3.1.7-1"
            },
            "os": {
                "type": "Windows_NT",
                "name": "win32",
                "architecture": "x64",
                "version": "10.0.17763"
            },
            "platform": "Node.js v10.2.0, LE, mongodb-core: 3.1.6",
            "application": {
                "name": "NoSQLBoosterV5_91046.417"
            },
        },
        "$configServerState": {
            "opTime": {
                "ts": Timestamp(1553006039,
                5),
                "t": NumberLong(4)
            }
        },
        "$db": "cache"
    }

如何按ostype进行过滤?

2 个答案:

答案 0 :(得分:1)

根据您的示例,简单的附加过滤器应该有效。

db.aggregate( [
    { $currentOp : { allUsers: true, localOps: true } },
    { $match: {$and: [
         { shard : 'shard-1' },
         { "command.$client.os.type": "Windows_NT" }]
    }}
 ])

它对您有用吗?

答案 1 :(得分:0)

使用此$ filter:

 过滤项目数组,使其仅包含价格大于或等于100的文档

$filter: {
   input: "$items",
   as: "item",
   cond: { $gte: [ "$$item.price", 100 ] }
}

完整的示例是:

db.sales.aggregate([
   {
      $project: {
         items: {
            $filter: {
               input: "$items",
               as: "item",
               cond: { $gte: [ "$$item.price", 100 ] }
            }
         }
      }
   }
])

可以在https://docs.mongodb.com/manual/reference/operator/aggregation/filter/

中阅读有关此内容的信息