私はmongodbにこのデータを持っています:
{
"name": "Amey",
"country": "India",
"region": "Dhule,Maharashtra"
}
そして、クエリで変数としてフィールド名を渡しながらデータを取得したいです。
以下は機能しません:
var name = req.params.name;
var value = req.params.value;
collection.findOne({name: value}, function(err, item) {
res.send(item);
});
フィールド名とその値の両方を動的に維持しながらmongodbにクエリを実行するにはどうすればよいですか?
クエリオブジェクトのキーを動的に設定する必要があります。
var name = req.params.name;
var value = req.params.value;
var query = {};
query[name] = value;
collection.findOne(query, function (err, item) { ... });
{name: value}
、キーは文字列'name'
であり、変数name
の値ではありません。
変数を[]に入れるだけです
var name=req.params.name;
var value = req.params.value;
collection.findOne({[name]:value}, function(err, item) {
res.send(item);
});
ネストされたフィールドのみ(値ではない)に関するクエリを作成しようとしている場合、たとえば、このドキュメントからフィールド "name"をクエリする場合などを明確にしたいと思います。
{
loc: [0, 3],
unit: {
name : "playername"
}
}
これは動作します(私の場合-アップデートを使用):
mdb.cords.updateOne(
{_id: ObjectID(someid)},
{$set: {[query]: newValue}},
function (err, result) {
...
}
}
[query]
を括弧で囲むだけで、mongodbにリテラルではなくパスであることがわかります。