4

私は、JavaScriptハッシュをループし、コレクションに対して集約を呼び出すという特定のタスクを実行するJavaScriptループを持っています。

$match 関数の集計クエリに変数を挿入できましたが、$project 関数ではできません。

ハッシュ キー全体で照合し、照合したばかりのドキュメントに既に含まれている値と組み合わせてハッシュ値を表示したいと考えています。これらのハッシュ値とラベルは、事前にドキュメントにはありませんでした。

var cmtss = {};

for (var item in cursor['result'])
{
    var prov = cursor['result'][item]['prov_group'];
    cmtss[cursor['result'][item]['name']] = prov;
}

for (var item in cmtss)
{
    var cmts = "$" + cmtss[item];

    result = db.modems.aggregate( { $match : { cmts: item } } ,
                                  { $project : {
                                       ip : "$ip",
                                       model : "$model",
                                       cmts : "$cmts",
                                       prov_group : cmts } } );
    printjson(result);
}

ご覧のとおり、cmts フィールドを提供されたキーと一致させる $match を含めています。しかし、これらの一致で、追加した新しいフィールドを含む 3 つのフィールドを表示したいのですが、その値は cmtss からのハッシュ値です。値の前に $ 演算子がある場合とない場合を試しました。結果ドキュメントに prov_group がまったく表示されないだけです。

どういうわけか $add を使用する必要がありますか?

4

1 に答える 1

1

私はそれを考え出した。...

{ $project : {
          ip : "$ip",
          model : "$model",
          cmts : "$cmts",
          prov_group : { '$substr': [$prov, 0, 5] } } } );
于 2013-08-07T04:37:40.507 に答える