国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

mongodb數(shù)組查詢(xún) - mongodb 內(nèi)嵌數(shù)組查詢(xún)問(wèn)題: 如何限定返回與條件匹配的數(shù)組
伊謝爾倫
伊謝爾倫 2017-04-27 09:02:20
0
6
833

原數(shù)據(jù)為:

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

查詢(xún)條件為

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

想返回的數(shù)據(jù):

{
    "_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
        }
    ]
}
伊謝爾倫
伊謝爾倫

小伙看你根骨奇佳,潛力無(wú)限,來(lái)學(xué)PHP伐。

Antworte allen(6)
迷茫

這個(gè)簡(jiǎn)單,使用下面的語(yǔ)句就可以?xún)H返回當(dāng)前匹配的數(shù)組:

db.getCollection('web_mem_favorites').find({"_id":NumberLong(1181675746),"favorite_shards.sid":NumberLong(577)},{"favorite_shards.$":1}).pretty()
洪濤
javascriptdb.getCollection('web_mem_favorites').find(
    {'_id':NumberLong(1181675746)},favorite_shards.sid': {'$in':[NumberLong(577)]}}
    {"_id" : 1, "favorite_shards": "$slice[2,1]" }
)

favorite_shards數(shù)組在返回時(shí),只返回第二個(gè)數(shù)組元素。
不過(guò)這個(gè)得提前知道sid:577是第幾個(gè)元素。
在mongodb的數(shù)組查詢(xún)手冊(cè)中,并沒(méi)有發(fā)現(xiàn)能返回滿(mǎn)足自定義條件的數(shù)組單元的方法,可以嘗試用程序在返回的結(jié)果集上再過(guò)濾下favorites_shards數(shù)據(jù)。

淡淡煙草味
findOne( {'_id':NumberLong(1181675746),'favorite_shards.sid': {'$in':[NumberLong(577)]}} ,{"favorite_shards.$":1, "_id": 0} )

懂題主意思了,下面是修改后的代碼

db.test.aggregate({"$unwind":"$favorite_shards"}, {"$match":{"favorite_shards.sid": {"$in": [NumberLong(578), NumberLong(577)]}}},  {"$group": {"_id": "$_id", "favorite_shards":{'$push': "$favorite_shards"}}})

結(jié)果:
{ "_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 } ] }

阿神

可以用projection操作符$elemMatch:

javascriptdb.test.find({'favorite_shards.sid': 577}, {favorite_shards:{$elemMatch:{sid:577 }  } }).pretty()

{
    "_id" : NumberLong(1181675746),
    "favorite_shards" : [
        {
            "sid" : NumberLong(577),
            "favorite_dt" : ISODate("2015-06-26T05:20:48.449Z"),
            "is_attention" : true
        }
    ]
}

$elemMatch的局限性是只能返回?cái)?shù)組中的第一個(gè)匹配記錄。

Ty80

我想問(wèn)一下這個(gè)是什么軟件?

習(xí)慣沉默

可以使用$unwind查詢(xún),也會(huì)返回多個(gè)滿(mǎn)足查詢(xún)條件的子文檔。

db.web_mem_favorites.aggregate(
    {"$project":{"favorite_shards":"$favorite_shards"}},
    {"$unwind":"$favorite_shards"},
    {"$match":{"favorite_shards.sid": NumberLong(577)}}
)
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage