【问题标题】:Mongodb native driver chain queriesMongoDB原生驱动链查询
【发布时间】:2020-05-05 08:15:53
【问题描述】:

我是 mongodb 查询的新手。我有这样的文件 -


{ 
   "_id" : ObjectId("5eb0f70f88cd051e7839325c"), 
   "id" : "1", 
   "arrayInfo" : [ {"color":"red"}, {"color":"black"}, {"color":"cyan"} ] 
}

有很多这种格式的文档在arrayInfo中改变了id和颜色。我想做一些类似的事情 -

查找 id 为“1”的记录 -> 在数组信息中显示对象 {"color" : "cyan"}

我相信我必须在找到这样的结果后链接查询 -

db.collection('Records').findOne({id:"1"}).**something**

任何帮助将不胜感激。

【问题讨论】:

  • 你试过 find() 方法吗
  • find({}) 返回所有匹配记录的游标。我只需要一个,所以我使用 findOne 但我特别需要访问该记录的 arrayInfo 数组。
  • 哦,我认为这不适用于 mongo db 中的深度搜索
  • 你为什么不传递文档ID?
  • 据我所知,这与问题无关。

标签: javascript mongodb express nested-queries


【解决方案1】:

if(id===1){

res.arrayInfo.map(item => console.log(item.color))
}

db.inventory.find( { "instock": { $elemMatch: { qty: 5, warehouse: "A" } } } )
enter link description here

【讨论】:

  • 我阅读了 mongodb 文档,但这并没有回答我的问题。我特别提到我正在尝试访问已找到对象的属性。
  • 当你找到你的特定文档时使用查询来查找文档然后用js获取数据
  • 这违背了这个问题的全部目的。我需要为此使用 mongodb 查询。
【解决方案2】:

如果没有指定操作符,MongoDB 在文档存储数组时默认执行数组元素匹配。因此,您可以简单地这样做:

MongoDB Enterprise ruby-driver-rs:PRIMARY> db.foo.findOne({id:'1',arrayInfo:{color:'cyan'}})
{
        "_id" : ObjectId("5eb0f70f88cd051e7839325c"),
        "id" : "1",
        "arrayInfo" : [
                {
                        "color" : "red"
                },
                {
                        "color" : "black"
                },
                {
                        "color" : "cyan"
                }
        ]
}

要匹配数组中的一个字段而不是整个数组元素,请使用$elemMatch

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-09
    • 1970-01-01
    • 2012-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多