1

我想减少 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")
}
4

2 回答 2

2

您似乎不能对 $cmd 命名空间使用投影。我尝试了助手的翻译查询,即:

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

它仍然不允许我预测结果。即使这是可能的,返回数组的多个子元素(成员是一个数组)的投影也不能很好地工作,所以即使投影有效,你也会遇到问题。

您可以使用一些简单的 javascript 来做到这一点。以下内容有效,但如果对您有用,您可能需要添加更多格式和字段名称:

rs.status().members.forEach( 
    function(z){ 
            printjson(z.name);
            printjson(z.stateStr);
            printjson(z.optimeDate); 
    } 
   )
于 2012-09-06T18:36:39.503 回答
1

从命令行:

mongo --eval "rs.status()" | grep "name\|stateStr\|optimeDate"
于 2021-05-07T18:48:20.660 回答