当前位置: 首页 > 知识库问答 >
问题:

基于嵌套subdoc数组值获取文档

钱瑞
2023-03-14
{
    _id: ObjectId('...'),
    name: "my event",
    members:
    [
        {
            _id: ObjectId('...'),
            name: "family",
            users: [ObjectId('...'),ObjectId('...'),ObjectId('...')]
        },
        {
            _id: ObjectId('...'),
            name: "work",
            users: [ObjectId('...'),ObjectId('...'),ObjectId('...')]
        }
    ]
}
{
    name: { type: String },
    members: {type: [{ type: ObjectId, ref: 'MemberGroup' }], default:[] }
}
{
    name: { type: String },
    users: [{type: mongoose.Schema.Types.ObjectId, ref: 'User'}]
}
var userId = new mongoose.Schema.ObjectId('57d9503ef10d5ffc08d6b8cc');
events.find({members: { $elemMatch : { users: { $in: [userId]} } }})

这个语法可以工作,但不返回元素,即使我知道有匹配的元素(使用robomongo可视化数据库)

共有1个答案

季阳朔
2023-03-14

因此,在stackoverflow中搜索了很长时间后,我在这里发现了一个好的answare:

MongoDB:如何找出数组字段是否包含元素

我的查询更改为以下内容,这给出了我想要的结果:

var userId = new mongoose.Schema.ObjectId('57d9503ef10d5ffc08d6b8cc');
events.find({}, {members: { $elemMatch : { users: { $eq: userId} } }})
 类似资料:
  • 如何根据数组的嵌套数组中的两个值参数进行查询?目标是返回具有和。 尝试了以下查询但没有成功。

  • 问题内容: 我正在尝试基于一些嵌套对象来过滤数组。 输入数组如下所示: 我希望这种情况的输出如下所示: 我正在使用此公式来做到这一点: 输出几乎是好的,但它返回的对象带有所有带有姓氏的对象(最好检查一下小提琴:D),而不是将其删除。我如何改善过滤? 问题答案: 调用之后,您需要将结果通过管道传递到,如下所示: 我在这里假设您不想操纵原始数组。因此,我正在使用Object.assign。

  • 问题内容: 这是我的代码。请运行脚本以查看其工作方式: 从上面的代码中,我的数据数组包含对象,这些对象具有用户名,他的电话号码和他所属的呼叫队列。 我分别有四个呼叫队列111,456,201和665。 一个用户可以处于任意数量的呼叫队列中。我已经过滤了控制器中的数据,以使其仅显示前端中属于队列111或队列456的用户。 因此,根据我的代码,用户Edmond属于队列665,因此其详细信息不会显示在前

  • 我有一些数组,如果它们包含类似的值,我想返回这些数组的名称。 我有我的变量,它有多个数组,名字要么是,要么是,要么是。包含的只是变量中某些数组中相同的值。我需要返回数组中包含、和的数组的名称。因此,对于这个示例,我需要返回:。 通过这个函数抛出它们时,我得到一个错误。如何获取返回的数组?

  • 我试图对包含大约100个大型实体(几乎有30个键)的对象数组进行排序,其基础是key的值,这些值深深嵌套在一个对象中,为此我使用了Lodash的orderBy方法: *考虑sortOrder为desc或asec 但排序过程所花费的时间相当长。我们可以使用哪种更好的方法来将键深埋在对象中对对象数组进行排序? 示例数据(考虑这样的50个条目至少有40个键)

  • 问题内容: 我在下面的对象中尝试获取所有id值。 使用以下代码,我仅获得第一个id值。有没有办法从嵌套对象中获取所有id值,而无需使用任何外部模块。 预期产量 问题答案: 您可以使用如下所示的JavaScript函数来获取嵌套属性: 检查此小提琴以获取可行的解决方案。