1

次のようなコレクションにドキュメントがあります。

{
  container : {
    P39433: 2,
    P30213: 4
  }
}

値 'P39433' および 'P30213' は、プログラムで動的に生成されます。mongo に対してドット表記を使用して次のクエリを直接実行すると、目的の結果が得られます

db.collection.findOne({ "container.P00000" : { $exists : false } }) 

書類を取り戻します。つまり、フィールドが存在しない場合にのみドキュメントを取得したいのです。

P00000 私の質問は、値が変数に含まれている場合、ネイティブ ドライバーを使用してノードでそのクエリを実行するにはどうすればよいかということです。

私の通常の解決策は、以下のようにクエリを構成することですが、結果は返されません。

var fieldName = 'P00000';
var dynObj = {};
dynObj[fieldName] = { $exists : false };
db.collection.findOne( { "container" : dynObj }); 
4

1 に答える 1

9

あなたは近くにいます。これを試して:

var fieldName = 'P00000';
var dynObj = {};
dynObj["container." + fieldName] = { $exists: false };
db.collection.findOne(dynObj); 

アップデート

Node.js 4+ が計算されたプロパティ名dynObjをサポートするようになったので、次のようにワンステップで作成できます。

var dynObj = {
    ["container." + fieldName]: { $exists: false }
};
于 2013-05-10T00:43:02.733 に答える