85831


次のようなデータがあったとして、うまくskillのstudy_atが全て登録されているデータ_id:222のみをfindしたいです。

[code]

    users = {  
      {_id: 111,
       name: "taro",
       skill:[
         {
           name: "ruby"
           study_at: "2021-11-11 00:00:00"
         },
         {
           name: "python"
           study_at: null
         }
       ]
      },
      {_id: 222,
       name: "jiro",
       skill:[
         {
           name: "ruby"
           study_at: "2021-11-12 00:00:00"
         },
         {
           name: "python"
           study_at: "2021-11-13 00:00:00"
         }
       ]
      },
      {_id: 333,
       name: "sabro",
       skill:[]
      },
    }
    
[/code]

以下のようにしても_id: 111も取得できてしまうので、うまくskill.study_atが全て値が入っているデータのみfindしたいです。

[code]

    db.users.find({skill: {$all:[{ $elemMatch : { study_at: { $ne: null } } }]}} )
    
[/code]

ご教授よろしくお願い致します


CC BY-SA 4.0
2022-01-20T13:50:29.247
85819
2022-01-21T04:38:30.550
15167
question
mongodb
MongoDBの検索でネストされた配列のある要素が全て登録されているデータのみを取得したいです。


`'skill.study_at'`に対して、「nullではなくフィールドが存在する」条件を指定することでご要望のレコードを取得できます。

[code]

    > db.users.find({'skill.study_at':{$ne:null, $exists:true}})
    { "_id" : 222, "name" : "jiro", "skill" : [ { "name" : "ruby", "study_at" : "2021-11-12 00:00:00" }, { "name" : "python", "study_at" : "2021-11-13 00:00:00" } ] }
    
[/code]


CC BY-SA 4.0
2022-01-21T03:14:20.190
85831
2022-01-21T04:38:30.550
2022-01-21T04:38:30.550
9820
9820
85819
answer