原数据为:
{
"_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中文网2017-04-27 09:04:20
으아악
favorite_shards 배열을 반환할 때 두 번째 배열 요소만 반환됩니다.
그러나 이를 위해서는 sid:577 요소가 무엇인지 미리 알아야 합니다.
mongodb 배열 쿼리 매뉴얼에는 사용자 정의 조건을 충족하는 배열 단위를 반환할 수 있는 메서드가 없습니다. 반환된 결과 집합에서 favorites_shards 데이터를 필터링하는 프로그램을 사용해 볼 수 있습니다.
淡淡烟草味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 } ] }
阿神2017-04-27 09:04:20
투영 연산자 $elemMatch를 사용할 수 있습니다.
으아악$elemMatch의 제한은 배열에서 첫 번째로 일치하는 레코드만 반환할 수 있다는 것입니다.