私はPythonスクリプトを使用してMongoDBコレクションを照会しています。このコレクションには、さまざまな構造の埋め込みドキュメントが含まれています。MongoDB 2.6のpreserveNullAndEmptyArraysの回避策
私はいくつかのドキュメントに含まれている配列を単純に "$ unwind"しようとしています。ただし、配列はすべての文書にありません。
つまり、フィールドを含むドキュメントのみが返され、それ以外は無視されます。私はPyongong 2.6を使用していますので、documentationに記載されているようにpreserveNullAndEmptyArrays
を使用することはできません。MongoDB 3.2の新機能ですので、
がありますか? "フィールドパスが存在する場合は、元に戻す"の行に沿って何か。
問題のドキュメントとコードの構造については、この個別のドキュメントで詳細に説明していますが、先に質問したrelated questionです。
ISSUE:
私は$hostnames.name
の値を "$ほどく" しようとしています。ただし、パスがすべてのドキュメントに存在しないため、いくつかの無視されたドキュメントが作成されます。 $ホスト名
{
"_id" : "192.168.2.1",
"addresses" : {
"ipv4" : "192.168.2.1"
},
"hostname" : "helloworld.com",
}
スクリプト
cmp = db['computers'].aggregate([
{"$project": {
"u_hostname": {
"$ifNull": [
"$hostnames.name",
{ "$map": {
"input": {"$literal": ["A"]},
"as": "el",
"in": "$hostname"
}}
]
},
"_id": 0,
"u_ipv4": "$addresses.ipv4"
}},
{"$unwind": "$u_hostname"}
])
として保存$ hostnames.name
{
"_id" : "192.168.1.1",
"addresses" : {
"ipv4" : "192.168.1.1"
},
"hostnames" : [
{
"type" : "PTR",
"name" : "example.hostname.com"
}
]
}
構造2ホスト名として保存
構造1つのホスト名
「ホスト名」の空の配列を持つすべてのドキュメントがありません。
これはまだ失われているドキュメントの構造です。
構造3
{
"_id" : "192.168.1.1",
"addresses" : { "ipv4" : "192.168.1.1" },
"hostnames" : [], }
}