<p>据我所知,您必须自己使用python递归遍历字典,以便构建上面所需的列表:</p>
<pre><code>channels = []
def traverse(my_dict):
for key, value in my_dict.items():
if isinstance(value, dict):
traverse(value)
else:
if key == "channel":
channels.append(value)
traverse({"a":{"channel":"abc123"}, "channel":"xyzzz"})
print(channels)
</code></pre>
<p>输出:</p>
<pre><code>['abc123', 'xyzzz']
</code></pre>
<p>但是,使用一个名为<code>projections</code>的东西,您可以得到接近您想要的结果(但不是真的,因为您必须手动指定所有通道):</p>
<pre><code>db.clients.find({"_id": 69}, {"configs.channel":1})
</code></pre>
<p>退货:</p>
<pre><code>{ "_id" : ObjectId("69"), "configs" : { "channel" : "ABC786" } }
</code></pre>
<p>如果您真的想玩,可以编写一个<code>generator</code>函数来生成给定字典中的所有键,不管它有多深:</p>
<pre><code>my_dict = { "a": {
"channel":"abc123",
"key2": "jjj",
"subdict": {"deep_key": 5, "channel": "nested"}
},
"channel":"xyzzz"}
def getAllKeys(my_dict):
for key, value in my_dict.items():
yield key, value
if isinstance(value, dict):
for key, value in getAllKeys(value):
yield key, value
for key, value in getAllKeys(my_dict):
if key == "channel":
print value
</code></pre>
<p>输出:</p>
<pre><code>nested
abc123
xyzzz
</code></pre>