찾다

 >  Q&A  >  본문

mongodb数组查询 - mongodb 内嵌数组查询问题: 如何限定返回与条件匹配的数组

原数据为:

{
    "_id" : NumberLong(1181675746),
    "shard_qty" : 4,
    "goods_qty" : 0,
    "shop_qty" : 0,
    "favorite_qty" : 4,
    "favorite_shards" : [ 
      {
            "sid" : NumberLong(580),
            "favorite_dt" : ISODate("2015-06-26T12:13:06.405+08:00"),
            "is_attention" : true
        }, 
      {
            "sid" : NumberLong(579),
            "favorite_dt" : ISODate("2015-06-26T12:13:06.405+08:00"),
            "is_attention" : true
        }, 
        {
            "sid" : NumberLong(578),
            "favorite_dt" : ISODate("2015-06-26T12:13:06.405+08:00"),
            "is_attention" : true
        }, 
        {
            "sid" : NumberLong(577),
            "favorite_dt" : ISODate("2015-06-26T13:20:48.449+08:00"),
            "is_attention" : true
        }
    ]
}

查询条件为

db.getCollection('web_mem_favorites').findOne(
    {
    '_id':NumberLong(1181675746),
    'favorite_shards.sid': {
        '$in':[NumberLong(577),NumberLong(578)]
        }
    }
    ,{"favorite_shards":1}
)

想返回的数据:

{
    "_id" : NumberLong(1181675746),
    "favorite_shards" : [ 
      {
            "sid" : NumberLong(578),
            "favorite_dt" : ISODate("2015-06-26T12:13:06.405+08:00"),
            "is_attention" : true
        }, 
        {
            "sid" : NumberLong(577),
            "favorite_dt" : ISODate("2015-06-26T13:20:48.449+08:00"),
            "is_attention" : true
        }
    ]
}
伊谢尔伦伊谢尔伦2762일 전707

모든 응답(6)나는 대답할 것이다

  • 迷茫

    迷茫2017-04-27 09:04:20

    현재 일치하는 배열만 반환하려면 다음 명령문을 사용하면 됩니다.

    으아악

    회신하다
    0
  • PHP中文网

    PHP中文网2017-04-27 09:04:20

    으아악

    favorite_shards 배열을 반환할 때 두 번째 배열 요소만 반환됩니다.
    그러나 이를 위해서는 sid:577 요소가 무엇인지 미리 알아야 합니다.
    mongodb 배열 쿼리 매뉴얼에는 사용자 정의 조건을 충족하는 배열 단위를 반환할 수 있는 메서드가 없습니다. 반환된 결과 집합에서 favorites_shards 데이터를 필터링하는 프로그램을 사용해 볼 수 있습니다.

    회신하다
    0
  • 淡淡烟草味

    淡淡烟草味2017-04-27 09:04:20

    으아악

    질문의 의미를 이해합니다. 수정된 코드는 다음과 같습니다

    으아악

    결과:
    { "_id" : NumberLong(1181675746), "favorite_shards" : [ { "sid" : NumberLong(578), "favorite_dt" : ISODate("2015-06-26T0406.405Z"), "is_attention" : true }, { "sid" : NumberLong(577), "favorite_dt" : ISODate("2015-06-26T0548.449Z" ), "is_attention" : true } ] }

    회신하다
    0
  • 阿神

    阿神2017-04-27 09:04:20

    투영 연산자 $elemMatch를 사용할 수 있습니다.

    으아악

    $elemMatch의 제한은 배열에서 첫 번째로 일치하는 레코드만 반환할 수 있다는 것입니다.

    회신하다
    0
  • PHP中文网

    PHP中文网2017-04-27 09:04:20

    이게 무슨 소프트웨어인지 묻고 싶습니다.

    회신하다
    0
  • 習慣沉默

    習慣沉默2017-04-27 09:04:20

    $unwind를 사용하여 쿼리할 수 있으며 쿼리 조건을 충족하는 여러 하위 문서가 반환됩니다.

    으아악

    회신하다
    0
  • 취소회신하다