mongodb数组查询 - mongodb 内嵌数组查询问题: 如何限定返回与条件匹配的数组
伊谢尔伦
伊谢尔伦 2017-04-27 09:02:20
0
6
679

原数据为:

{
    "_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
        }
    ]
}
伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

모든 응답(6)
迷茫

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

으아악
洪涛

으아악

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

淡淡烟草味

으아악

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

으아악

결과:
{ "_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 } ] }

阿神

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

으아악

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

Ty80

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

習慣沉默

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

으아악
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!