মঙ্গুজ, সন্ধানের সাথে একটি নির্দিষ্ট ক্ষেত্র নির্বাচন করুন


121

আমি শুধুমাত্র একটি নির্দিষ্ট ক্ষেত্রের সাথে নির্বাচন করার চেষ্টা করছি

exports.someValue = function(req, res, next) {
    //query with mongoose
    var query = dbSchemas.SomeValue.find({}).select('name');

    query.exec(function (err, someValue) {
        if (err) return next(err);
        res.send(someValue);
    });
};

তবে আমার জসনের প্রতিক্রিয়ায় আমি _ আইডিটিও পাচ্ছি, আমার নথির স্কিমাতে কেবল দুটি ফাইল, _id এবং নাম রয়েছে

[{"_id":70672,"name":"SOME VALUE 1"},{"_id":71327,"name":"SOME VALUE 2"}]

কেন ???

উত্তর:


201

_idক্ষেত্র যদি না আপনি স্পষ্টভাবে এটি অগ্রাহ্য সবসময় উপস্থিত। -সিনট্যাক্স ব্যবহার করে এটি করুন :

exports.someValue = function(req, res, next) {
    //query with mongoose
    var query = dbSchemas.SomeValue.find({}).select('name -_id');

    query.exec(function (err, someValue) {
        if (err) return next(err);
        res.send(someValue);
    });
};

বা স্পষ্টভাবে একটি বস্তুর মাধ্যমে:

exports.someValue = function(req, res, next) {
    //query with mongoose
    var query = dbSchemas.SomeValue.find({}).select({ "name": 1, "_id": 0});

    query.exec(function (err, someValue) {
        if (err) return next(err);
        res.send(someValue);
    });
};

1
আমি মনে করি .selectশুধু ক্ষেত্র নির্বাচন করতে আপনি যে সব পেতে পরে একটি ফিল্টার, আমার সুপারিশ ব্যবহার করা.find({}, 'name -_id')
hong4rc

3
@ হাঙ্গার্ক .find({}, 'name -_id')কাজ করছে না বলে মনে হচ্ছে?
শানিকা এডিরিভিরা

['নাম': 'মান 1', 'নাম': 'মান 2', 'নাম' এর পরিবর্তে ['value1', 'value2', 'value3'] এর মতো কোনও আপত্তি ছাড়াই মান প্রত্যক্ষ করার কোনও উপায় আছে: 'মান 3']
এম .আমার

66

এটি করার একটি ছোট উপায় আছে:

exports.someValue = function(req, res, next) {
    //query with mongoose
    dbSchemas.SomeValue.find({}, 'name', function(err, someValue){
      if(err) return next(err);
      res.send(someValue);
    });
    //this eliminates the .select() and .exec() methods
};

আপনি যদি বেশিরভাগটি Schema fieldsচান এবং কেবল কয়েকটি বাদ দিতে চান তবে আপনি ক্ষেত্রটি nameএকটি সহ প্রিফিক্স করতে পারেন -। উদা "-name"দ্বিতীয় যুক্তি ইন হবে না অন্তর্ভুক্ত nameদস্তাবেজে অন্তর্ভুক্ত ক্ষেত্র যেহেতু উদাহরণস্বরূপ এখানে দেওয়া থাকবে শুধুমাত্রname ফিরে ডক্সে ক্ষেত্র।


27
যারা একাধিক ক্ষেত্র ফিল্টার করতে চান তাদের জন্য কমা দিয়ে আলাদা করবেন না, কেবল সরল জায়গা:blogItemModel.find({}, 'title intro_image intro_text publish_date', function(err, blog_items){..
স্টারওয়েভ

1
যারা উপরের dbSchema.Somevalue.find ({userEmail:'test@test.com '},' userEmail -_id ', ফাংশন (ত্রুটি, কিছুটা মূল্য)
ব্যবহারকারী 2180794

1
একাধিক ক্ষেত্র কেবল 'নাম' এর পরিবর্তে ['নাম', 'ফিল্ড 2', 'ফিল্ড 3', 'ইত্যাদি'] ​​হবে
এরে টি

24

মঙ্গুজে নেটিভ মঙ্গোডিবি কোড ব্যবহার করে এটি পরিচালনা করার আরও ভাল উপায় আছে।

exports.getUsers = function(req, res, next) {

    var usersProjection = { 
        __v: false,
        _id: false
    };

    User.find({}, usersProjection, function (err, users) {
        if (err) return next(err);
        res.json(users);
    });    
}

http://docs.mongodb.org/manual/reference/method/db.collection.find/

বিঃদ্রঃ:

var ব্যবহারকারীপ্রকাশ

এখানে তালিকাভুক্ত অবজেক্টের তালিকা ফিরে / মুদ্রণ করা হবে না।


আপনি কীভাবে সন্ধানের সাথে এটি করবেন?
শূন্য_কুল

json অ্যারে নামের প্রশ্নাবলীর প্রয়োজন needs আপনার পদ্ধতির সাথে অন্যান্য কীগুলিও বয়সের মতো আসবে ইত্যাদি রয়েছে
রতন উদয় কুমার

আশ্চর্যজনক, ঠিক আমি যা খুঁজছিলাম
তেজা

9

ডিবি ডেটা

[
  {
    "_id": "70001",
    "name": "peter"
  },
  {
    "_id": "70002",
    "name": "john"
  },
  {
    "_id": "70003",
    "name": "joseph"
  }
]

প্রশ্ন

db.collection.find({},
{
  "_id": 0,
  "name": 1
}).exec((Result)=>{
    console.log(Result);
})

আউটপুট:

[
  {
    "name": "peter"
  },
  {
    "name": "john"
  },
  {
    "name": "joseph"
  }
]

কাজের নমুনা খেলার মাঠ

লিংক


4

বর্জন করা

নীচে কোড প্রতিটি নথির মধ্যে পাসওয়ার্ড ব্যতীত অন্য সমস্ত ক্ষেত্র পুনরুদ্ধার করবে:

const users = await UserModel.find({}, {
  password: 0 
});
console.log(users);

আউটপুট

[
  {
    "_id": "5dd3fb12b40da214026e0658",
    "email": "example@example.com"
  }
]

অন্তর্ভুক্ত করা

নীচের কোডগুলি প্রতিটি নথির মধ্যে কেবল ইমেল ক্ষেত্রটি পুনরুদ্ধার করবে:

const users = await UserModel.find({}, {
  email: 1
});
console.log(users);

আউটপুট

[
  {
    "email": "example@example.com"
  }
]

3

এটি করার সঠিক উপায়টি হ'ল .project()নতুন mongodbএবং nodejsড্রাইভারের সাথে কার্সার পদ্ধতিটি ব্যবহার করা ।

var query = await dbSchemas.SomeValue.find({}).project({ name: 1, _id: 0 })

3
.project()শুধুমাত্র সমষ্টি সহ কাজ করে। আপনি এটি ব্যবহার করতে চাইলে find({},{ name: 1, _id: 0 })পদ্ধতিতে দ্বিতীয় যুক্তি ব্যবহার করুন ।
শ্যাম

নতুন মঙ্গডব নোড ড্রাইভারের সাথে নেই আপনাকে এইভাবে ব্যবহার করতে হবে। তবে মঙ্গুজ দিয়ে আপনি দ্বিতীয় যুক্তি ব্যবহার করতে পারেন।
এশ

1
আহ, এটি নোডেজ ড্রাইভারের মধ্যে রয়েছে।
শম

বুঝতে পারছেন না, তবে নতুন সংস্করণগুলিতে
@ অ্যান্টনি

2

উদাহরণ স্বরূপ,

User.find({}, { createdAt: 0, updatedAt: 0, isActive: 0, _id : 1 }).then(...)

0 এর অর্থ উপেক্ষা করা

1 মানে শো

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.