ホームページ  >  に質問  >  本文

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
        }
    ]
}
伊谢尔伦伊谢尔伦2731日前684

全員に返信(6)返信します

  • 迷茫

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

    これは簡単で、現在一致する配列のみを返すには次のステートメントを使用します。 リーリー

    返事
    0
  • PHP中文网

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

    リーリー

    favorite_shards 配列が返される場合、2 番目の配列要素のみが返されます。
    ただし、これには、sid:577 がどの要素であるかを事前に知っておく必要があります。
    mongodb 配列クエリのマニュアルには、カスタム条件を満たす配列ユニットを返すメソッドはありません。プログラムを使用して、返された結果セットの favourites_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
  • キャンセル返事