簡體   English   中英

我無法正確獲得查詢的答案 MongoDB - Find 方法

[英]I can't get the answer to the query correctly MongoDB - Find method

我的JSON:

  { 
    "user_id" : "1000" ,
    "boxes" : [
        {
            "box_id" : "12345", 
            "box_name" : "Box 3", 
            "items" : [], 
            "visible" : false 
        },
        {
            "box_id" : "2000", 
            "box_name" : "Box 1", 
            "items" : [],
            "visible" : true 
        }, 
        {
            "box_id" : "3000", 
            "box_name" : "Box 2", 
            "items" : [], 
            "visible" : true 
        }
    ], 
    "user_name" : "Jimmy", 
}

我只是想知道哪個框屬於user_id:"1000" ,哪個是visible: true哪個是box_id: "3000" 我的查詢是:

db.getCollection("users")
   .find({user_id:"1000", 
          $and: [{"boxes.box_id": "3000"},{"boxes.visible": true}]}, 
          {"boxes.$":1})

但我總是得到 box_id:12345 一個。 我找不到任何關於它的信息。 謝謝你的回答。

根據位置 $ 運算符的文檔,您不能將 $ 與多個條件一起使用。 你必須使用$elemMatch來解決這個限制。

數組字段限制

MongoDB 在處理數組上的投影時需要以下內容:

  • 投影文檔中只能出現一個位置 $ 運算符。
  • 查詢文檔中只應出現一個數組字段,即受 $ 投影運算符限制的字段。 查詢文檔中的其他數組字段可能會導致未定義的行為。
  • 查詢文檔應該只包含正在投影的數組字段上的單個條件。 多個條件可能會在內部相互覆蓋並導致未定義的行為。

在這些要求下,以下查詢是不正確的:

 db.collection.find( { <array>: <value>, <someOtherArray>: <value2> }, { "<array>.$": 1 } )

要在該數組內的多個文檔字段上指定條件,請使用 $elemMatch 查詢運算符。 以下查詢返回成績數組中的第一個文檔,該文檔的平均值大於 70 且等級大於 90。

 db.students.find( { grades: { $elemMatch: { mean: { $gt: 70 }, grade: { $gt:90 } } } }, { "grades.$": 1 } )

如果您需要單獨的條件來選擇文檔和選擇這些文檔中的字段,則必須使用 $elemMatch 運算符。

所以我會嘗試這樣的查詢:

db.users.find({ user_id:"1000", boxes: { $elemMatch: { "box_id": "3000", "visible": true } } }, {"boxes.$":1});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM