Saya memiliki data ini di mongodb:
{
"name": "Amey",
"country": "India",
"region": "Dhule,Maharashtra"
}
dan saya ingin mengambil data sambil meneruskan nama bidang sebagai variabel dalam kueri.
Mengikuti tidak berfungsi:
var name = req.params.name;
var value = req.params.value;
collection.findOne({name: value}, function(err, item) {
res.send(item);
});
Bagaimana cara meminta mongodb dengan menjaga nama bidang dan nilainya tetap dinamis?
Jawaban:
Anda perlu menyetel kunci objek kueri secara dinamis:
var name = req.params.name; var value = req.params.value; var query = {}; query[name] = value; collection.findOne(query, function (err, item) { ... });
Ketika Anda melakukannya
{name: value}
, kuncinya adalah string'name'
dan bukan nilai variabelname
.sumber
value
dengan kueri Anda seperti{ $gt: 50 }
Letakkan saja variabel di []
var name=req.params.name; var value = req.params.value; collection.findOne({[name]:value}, function(err, item) { res.send(item); });
sumber
Saya ingin mengklarifikasi bahwa jika Anda mencoba membuat kueri tentang bidang bersarang saja (bukan nilainya), seperti jika Anda ingin menanyakan bidang "nama" dari dokumen ini:
{ loc: [0, 3], unit: { name : "playername" } }
ini akan berfungsi (seperti dalam kasus saya - menggunakan pembaruan):
mdb.cords.updateOne( {_id: ObjectID(someid)}, {$set: {[query]: newValue}}, function (err, result) { ... } }
Cukup melampirkan
[query]
dalam tanda kurung memberi tahu mongodb bahwa itu bukan literal, melainkan sebuah jalur.sumber
gunakan seperti ini jika objeknya bersarang.
Objek langsung:-
var name=req.params.name; var value = req.params.value; collection.findOne({[name]:value}, function(err, item) { res.send(item); });
Sebuah objek bertingkat: -
var surname=req.params.surname; var value = req.params.value; var condition = `name.${surname}` collection.findOne({[condition]:value}, function(err, item) { res.send(item); });
sumber
'name.${surname}'
tetapi untuk variabel kami tidak menggunakan ', terima kasih