繁体   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