মংডোব-নেটিভ ফাইন্ডনে () এ ফিল্ডের নাম হিসাবে ভেরিয়েবল কীভাবে ব্যবহার করবেন?


89

মংডোবতে আমার এই ডেটা রয়েছে:

{  
    "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);
});

ক্ষেত্রের নাম এবং এর মান উভয় রেখেই আমি কীভাবে মঙ্গোদবকে জিজ্ঞাসা করতে পারি?


সবে এই পোস্টটি পাওয়া গেছে। আমি মনে করি এটি সত্যই অনিরাপদ। আপনি কি মনে করেন না যে কোনও মান হিসাবে এই মানগুলি ব্যবহার করার আগে আপনার স্যানিটাইজ করা উচিত?
ম্যাকস্টুফিনস

উত্তর:


142

আপনাকে ক্যোয়ারী অবজেক্টের কীটি গতিশীলভাবে সেট করতে হবে:

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


আপনি যদি কোয়েরির ভিতরে tors gt হিসাবে অপারেটরগুলি ব্যবহার করতে চান তবে কী হবে?
সাবভাস পারস্তাদিদিস

আপনি valueআপনার ক্যোয়ারী দ্বারা প্রতিস্থাপন করেছেন{ $gt: 50 }
ম্যাক্সডেক

উপরের সমাধান var কোয়েরি ব্যবহার করে নিয়মিত এক্সপ্রেস কীভাবে পাস করবেন = pass}; প্রশ্ন [নাম] = মান; ?
রোহিত লুথ্রা

4
আমি সফল জিজ্ঞাসা = {}; ক্যোয়ারী ['রেজিস্ট্রেশননি'] = {"$ রেজেক্স": এসকোড, "$ বিকল্পগুলি": "এম"};
রোহিত লুথ্রা

4
@ লেভেলোন আমার চেয়ে দ্রুত ছিল :)
ম্যাক্সডেক

60

কেবল পরিবর্তনশীলটি এতে রাখুন []

var name=req.params.name;
var value = req.params.value;
collection.findOne({[name]:value}, function(err, item) {
res.send(item);
});

4
আপনার উত্তর অনেক সোজা এগিয়ে!
ব্যবহারকারী523234

4
এটি সরাসরি মঙ্গো ক্যোয়ারী হিসাবে কাজ করে না; E ত্রুটি ফিরে পেয়েছে E সিন্ট্যাক্স এরিয়ার: অপ্রত্যাশিত টোকেন [ । আমি নিশ্চিত নই যে এটি কীভাবে নোড.জেজে কাজ করতে পারে?
ভিন্স বোডরেন

আমি মনে করি এর কারণ হ'ল নোডেজগুলি মোংডবের সাথে ইন্টারেক্ট করার সময় রূপান্তর করবে।
কিওয়েনলাউ

নোডেজের জন্য নেটিভ মংডোব ড্রাইভে এই কাজ! ধন্যবাদ!
গিহগো 0

ধন্যবাদ! এটি আমার আরও বিমূর্ত কোডে কাজ করেছে যার জন্য গ্রহণযোগ্য উত্তরটি কোনও অর্থ দেয়নি (রেকর্ডের জন্য, নোডজেগুলি প্রতিক্রিয়া নয়)।
adinutzyc21

7

আমি স্পষ্ট করে বলতে চাই আপনি যদি কেবলমাত্র নেস্টেড ফিল্ডের বিষয়ে কোনও অনুসন্ধান করার চেষ্টা করছেন (এর মান নয়), আপনি যদি এই দস্তাবেজ থেকে "নাম" ক্ষেত্রটি অনুসন্ধান করতে চান তবে:

{
    loc: [0, 3],
    unit: {
        name : "playername"
    }
}

এটি কাজ করবে (যেমনটি আমার ক্ষেত্রে - আপডেট ব্যবহার করে):

mdb.cords.updateOne(
    {_id: ObjectID(someid)}, 
    {$set: {[query]: newValue}}, 
    function (err, result) {
        ...
    }
}

কেবল [query]বন্ধনীতে আবদ্ধ হয়ে মঙ্গডবকে বলে যে এটি আক্ষরিক নয়, বরং একটি পথ।


2

যদি বস্তুটি নেস্ট করা থাকে তবে এটি ব্যবহার করুন।

সরাসরি বস্তুর:-

var name=req.params.name;
var value = req.params.value;
collection.findOne({[name]:value}, function(err, item) {
res.send(item);
});

একটি বস্তু বাসা বাঁধে: -

var surname=req.params.surname;
var value = req.params.value;
var condition = `name.${surname}`
collection.findOne({[condition]:value}, function(err, item) {
res.send(item);
});

এটি সাহায্য করেছে, আমি ব্যবহার করছি 'name.${surname}'তবে পরিবর্তনশীল আমরা ব্যবহার করি না ', ধন্যবাদ
1UC1F3R616
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.