【问题标题】:I can't get the answer to the query correctly MongoDB - Find method我无法正确得到查询的答案 MongoDB - Find 方法
【发布时间】:2019-05-02 18:21:51
【问题描述】:

我的 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 之一。我找不到任何关于它的信息。 谢谢你的回答。

【问题讨论】:

    标签: arrays node.js mongodb express mongoose


    【解决方案1】:

    根据the documentation for the positional $ operator,您不能将$ 与多个条件一起使用。您必须改用$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});

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-14
      • 1970-01-01
      • 2019-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多