【问题标题】:Query nested array of objects in node mongodb [duplicate]查询节点mongodb中的嵌套对象数组[重复]
【发布时间】:2019-10-29 17:56:03
【问题描述】:

我是 node + Mongo 的新手。我在 mongoDB 中有以下结构的数据:

     var data = [{
    id:1,
    createdBy:"test",
    sharedTo:["john","shekar"]
    },
    {
    id:2,
    createdBy:"steve",
    sharedTo:["test","shekar"]
    },
{
    id:3,
    createdBy:"mark",
    sharedTo:["steve","test"]
    },
{
    id:4,
    createdBy:"akuni",
    sharedTo:["john","shekar","mark"]
    },
{
    id:5,
    createdBy:"test",
    sharedTo:["mark","shekar"]
    },
{
    id:6,
    createdBy:"mark",
    sharedTo:["test","akuni"]
    }]

我想查询这个以获取用户“test”创建的所有记录以及共享给“test”的那些记录。我该怎么做?

预期结果:

[{
    id:1,
    createdBy:"test",
    sharedTo:["john","shekar"]
    },

{
    id:5,
    createdBy:"test",
    sharedTo:["mark","shekar"]
    },
{
    id:6,
    createdBy:"mark",
    sharedTo:["test","akuni"]
    }]

我尝试过类似的东西

var user = "test";
    data.find({createdBy:user,sharedTo:{$elemMatch:[user]}},function(err, resp){

    });

但它返回的是空的

【问题讨论】:

  • 您实际尝试过什么查询?人们通常很乐意帮助,当你很清楚你已经做出了一些努力,但问题中没有任何查询尝试。此外,这里根本没有“嵌套数组”组件。老实说,我建议阅读核心文档中的Query Documents,因为您似乎并不熟悉 MongoDB 查询的基础知识。这将帮助您并减轻您为遇到的每件新事物发布问题的需要。 MongoDB 真的不在乎您的字符串是否在数组中。
  • 如果链接的答案和文档不够直接清晰,那么这个基本上是.find({ "$or": [{ "createdBy": "test" }, { "sharedTo": "test" }] })解决的
  • 你也应该看看$elemMatch 运算符。
  • @Dijkstra 你真的不应该。这与$elemMatch 无关。我建议您查看核心文档中的Specify Multiple Conditions for Array of Documents,以便您也可以真正了解何时以及为什么使用$elemMatch。这不是其中一种情况。
  • @NeilLunn 谢谢你的建议。我真的很感激。

标签: node.js mongodb mean-stack


【解决方案1】:

使用 mongodb 的 $or 查询运算符

db.collection.find({
  $or: [
    { createdBy: "test" },
    { sharedTo: "test" }
  ]
})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-23
    • 2016-09-05
    • 2018-11-01
    • 2018-09-10
    • 2020-03-28
    • 1970-01-01
    • 2021-08-13
    • 1970-01-01
    相关资源
    最近更新 更多