最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - Is it possible to query a element in mongoose map by key alone - Stack Overflow

programmeradmin1浏览0评论

If I have a mongoose schema with a map. Is it possible to query a element in the map by key alone

const userSchema = new Schema( {
    
    socialHandles: {
        type: Map,
        of: String
    },
    active: {type:Boolean, default:true}
} );

I am able to query and find a user whose social handles has instagram key and instagram key holds a particular value with the below syntax.

let user = await User.findOne({ 'socialHandles.instagram': 'jondoe' });

I am looking for a way to query and find the instagram ids of user if a key called instagram exists. Something of the below form ie get a user with a social handle instagram ( I would need the value of instagram later on).

let user = await User.findOne({ 'socialHandles.instagram': * });  // this is just a wrong syntax to explain what I want to achieve

If I have a mongoose schema with a map. Is it possible to query a element in the map by key alone

const userSchema = new Schema( {
    
    socialHandles: {
        type: Map,
        of: String
    },
    active: {type:Boolean, default:true}
} );

I am able to query and find a user whose social handles has instagram key and instagram key holds a particular value with the below syntax.

let user = await User.findOne({ 'socialHandles.instagram': 'jondoe' });

I am looking for a way to query and find the instagram ids of user if a key called instagram exists. Something of the below form ie get a user with a social handle instagram ( I would need the value of instagram later on).

let user = await User.findOne({ 'socialHandles.instagram': * });  // this is just a wrong syntax to explain what I want to achieve
Share Improve this question asked Oct 28, 2021 at 9:01 ArunJoseArunJose 2,1742 gold badges13 silver badges34 bronze badges
Add a ment  | 

3 Answers 3

Reset to default 5

You can use $exists like this:

User.findOne({
  "socialHandles.instagram": {
    "$exists": true
  }
})

Example here

Use exists

let user = await User.findOne().exists('socialHandles.instagram')

When I do this

await User.findOne().exists('socialHandles.instagram');

it returns the entire Map. If someone wants to get the individual item (how I got here) we can do this:

const map = await User.findOne();
const user = user.get('socialHandles.instagram');

Also using this method we can get the entire Map by omitting .instagram:

const user = user.get('socialHandles');
发布评论

评论列表(0)

  1. 暂无评论