2016-12-02 71 views
0

當我嘗試使用find({query})查找數組中的特定對象時,我總是獲取數組中的所有元素。 活動數組存儲活動(這將是一個數千人的),你可以在下面的摘要中看到:Mongoose查找返回文檔而不是數組中的特定對象

這是我收集:

{ 
    "_id" : ObjectId("58407140755324d04db2ce95"), 
    "owner" : 103429326776572, 
    "activities" : [ 
      { 
        "name" : "test1", 
        "startTime" : ISODate("2016-08-11T17:41:54Z"), 
        "type" : "te1", 
        "lat" : 1, 
        "lon" : 1, 
        "creator" : 126212904493088, 
        "coverPhoto" : { 
          "name" : "test1", 
          "path" : "c:\\Users\\Francis\\Desktop\\dusk\\public\\coverPhotos\\SJ9tpP6Mx.jpg" 
        }, 
        "identifier" : "H1g9F6vpGl", 
        "users" : [ 
          1, 
          2, 
          3 
        ], 
        "hashTags" : [ 
          "some", 
          "hashtags" 
        ] 
      }, 
      { 
        "name" : "test2", 
        "startTime" : ISODate("2016-08-11T17:41:53Z"), 
        "type" : "te2", 
        "lat" : 1, 
        "lon" : 1, 
        "creator" : 103312904493090, 
        "coverPhoto" : { 
          "name" : "test2", 
          "path" : "c:\\Users\\Francis\\Desktop\\dusk\\public\\coverPhotos\\Hy8qpvafe.jpg" 
        }, 
        "identifier" : "rJlU5TvpMx", 
        "users" : [ 
          1, 
          2, 
          3 
        ], 
        "hashTags" : [ 
          "some", 
          "hashtags" 
        ] 
      } 
    ] 

}

我需要得到例如具有特定標識符的活動。 我試圖使用像查詢:

1)db.myCollection.find({ 'activities.identifier': 「rJlU5TvpMx」})

2)db.myCollection.find({ '活動':{ $ elemMatch:{ 「標識」: 「rJlU5TvpMx」, 「創造者」:103312904493090}})

而與 '全部合併' 或 「」 標誌

我在上面查詢發現,在相同的文檔架構作爲MongoDB的文檔我的是。

你能告訴我我做錯了什麼嗎?

+0

您收到的錯誤消息是什麼? – MonsterWimp757

回答

1

您可以嘗試根據您的需要使用單個匹配或多個匹配。這使得利用$elemMatch(projection)

db.myCollection.find({"_id" : ObjectId("58407140755324d04db2ce95")}, 
      {activities: {$elemMatch: { identifier: "rJlU5TvpMx"}}}) 

db.myCollection.find({"_id" : ObjectId("58407140755324d04db2ce95")}, 
      {activities: {$elemMatch: {creator : 103312904493090, identifier: "rJlU5TvpMx" }}}) 
+0

非常感謝!這是我尋找:) – Monday1994

+0

它減少查詢/搜索時間?只是好奇! –

+0

@BigGuy比較什麼?它的速度更快,因爲發現和投影都可以使用索引。 – Veeram

0

在您搜索的集合中,您只有一個Document(Object)。如果您將方法find()應用於您的集合,並且內部查詢與activities.identifier中的值匹配,它將返回唯一的Document(對象)。

爲了更好地理解我在說什麼貓鼬API文檔example 而查詢結果here

請嘗試檢查此出而不是

相關問題