mongodb 我如何得到一个只包含{ name,stateStr,optimeDate }的rs.status()的投影

4ngedf3f  于 2023-10-16  发布在  Go
关注(0)|答案(3)|浏览(64)

我想减少rs.status()方法的输出,因此只显示来自每个成员的name、stateStr和optimeDate。有没有办法做到这一点?rs.status()只是被某个地方的某个集合支持,它是什么,我如何直接查询它。实际上我想要的是...

PRIMARY> rs.status().pretty( {members.name: 1, members.stateStr: 1, members.optimeDate: 1 } );
{
    "name" : "mongo1.rek.tc",
    "stateStr" : "PRIMARY",
    "optimeDate" : ISODate("2012-09-06T17:28:19Z")
},
{
    "name" : "mongo2.rek.tc",
    "stateStr" : "SECONDARY",
    "optimeDate" : ISODate("2012-09-06T17:28:14Z")
},
{
    "name" : "mongo3.rek.tc",
    "stateStr" : "SECONDARY",
    "optimeDate" : ISODate("2012-09-06T17:28:15Z")
}
af7jpaap

af7jpaap1#

你不能对$cmd名称空间使用投影。我试着从助手翻译查询,即:

db.$cmd.findOne( { replSetGetStatus : 1 })

它还是不让我预测结果。即使这是可能的,投射返回数组的多个子元素(成员是一个数组)也不太好用,所以即使投射工作,你也会有问题。
你可以用一点简单的JavaScript来做到这一点。下面的工作,但你可能想添加更多的格式和字段名称,如果它对你有用:

rs.status().members.forEach( 
    function(z){ 
            printjson(z.name);
            printjson(z.stateStr);
            printjson(z.optimeDate); 
    } 
   )
m1m5dgzv

m1m5dgzv2#

从命令行:

mongo --eval "rs.status()" | grep "name\|stateStr\|optimeDate"
vh0rcniy

vh0rcniy3#

你不需要JavaScript或Linux,你可以尝试

rs.status().members.forEach(function (m) { print(m.name.split(":").shift()); print(m.stateStr); print(m.uptime) })

相关问题