小编Ash*_*shh的帖子

更新查询两次将 ObjectID 添加到数组

我正在开发一个桌子规划器应用程序,可以将客人分配到桌子上。表模型具有以下架构:

const mongoose = require('mongoose');

mongoose.Promise = global.Promise;

const tableSchema = new mongoose.Schema({
  name: {
    type: String,
    required: 'Please provide the name of the table',
    trim: true,
  },
  capacity: {
    type: Number,
    required: 'Please provide the capacity of the table',
  },
  guests: [{
    type: mongoose.Schema.Types.ObjectId,
    ref: 'Guest',
  }],
});

module.exports = mongoose.model('Table', tableSchema);
Run Code Online (Sandbox Code Playgroud)

客人可以在应用程序中(使用 React DND)拖放到“表”React 组件。当被放到一个表上时,一个 Axios POST 请求被发送到一个 Node.js 方法来更新数据库并将来宾的对象 ID 添加到表模型中的一个数组中:

exports.updateTableGuests = async (req, res) => {
  console.log(req.body.guestId);
  await Table.findOneAndUpdate(
    { name: req.body.tablename },
    { $push: …
Run Code Online (Sandbox Code Playgroud)

mongoose mongodb mongodb-query

4
推荐指数
1
解决办法
934
查看次数

$ lookup mongodb中的嵌套数组

我正在与lookupMongoDB中新的(可爱的)运算符进行斗争。我有3个收藏:

艺术家

{ 
    "_id" : ObjectId("5b0d2b2c7ac4792df69a9942"), 
    "name" : "Dream Theater", 
    "started_in" : NumberInt(1985), 
    "active" : true, 
    "country" : "US", 
    "current_members" : [
        ObjectId("5b0d2a7c7ac4792df69a9941")
    ], 
    "previous_members" : [
        ObjectId("5b0d2bf57ac4792df69a9954")
    ], 
    "albums" : [
        ObjectId("5b0d16ee7ac4792df69a9924"), 
        ObjectId("5b0d47667ac4792df69a9994")
    ], 
    "genres" : [
        "prog metal", 
        "prog rock"
    ]
}
Run Code Online (Sandbox Code Playgroud)

专辑

{ 
    "_id" : ObjectId("5b0d16ee7ac4792df69a9924"), 
    "title" : "Images and words", 
    "released" : ISODate("1992-07-07T00:00:00.000+0000"), 
    "songs" : [
        ObjectId("5b0d15ab7ac4792df69a9916"), 
        ObjectId("5b0d15ee7ac4792df69a991e"), 
        ObjectId("5b0d2db37ac4792df69a995d"), 
        ObjectId("5b0d2dbe7ac4792df69a995e"), 
        ObjectId("5b0d2dcb7ac4792df69a995f"), 
        ObjectId("5b0d2dd87ac4792df69a9960"), 
        ObjectId("5b0d2de27ac4792df69a9961"), 
        ObjectId("5b0d2dec7ac4792df69a9962")
    ], 
    "type" : "LP"
}
{ 
    "title" : "Awake", 
    "released" …
Run Code Online (Sandbox Code Playgroud)

mongodb mongodb-query aggregation-framework

4
推荐指数
1
解决办法
2062
查看次数

在mongodb中过滤嵌套数组?

我有一个看起来像这样的文件:

{
    "_id": {
        "$oid": "5b1586ccf0c56353e89d330b"
    },
    "address": {
        "street": "123 Street",
        "address2": "Address 2",
        "city": "Some City",
        "state": "MI",
        "zip": "12345"
    },
    "subs": [
        {
            "invoices": [
                {
                    "address": {
                        "street": "3061 Pine Ave SW",
                        "city": "Grandville",
                        "state": "AK",
                        "zip": "49418"
                    },
                    "lineItem": [
                        {
                            "images": [
                                {
                                    "_id": {
                                        "$oid": "5b1fca54e6ee1d80c463612d"
                                    },
                                    "name": "1528810066348_RSA Logo.jpeg",
                                    "url": "https....",
                                    "uploadDate": {
                                        "$date": "2018-06-12T13:27:46.931Z"
                                    },
                                    "size": 91819
                                }
                            ],
                            "_id": {
                                "$oid": "5b1fca54e6ee1d80c463612c"
                            },
                            "desc": "2",
                            "amt": 2
                        }
                    ],
                    "_id": …
Run Code Online (Sandbox Code Playgroud)

mongoose mongodb mongodb-query aggregation-framework

4
推荐指数
1
解决办法
6316
查看次数

$ in需要一个数组作为第二个参数,发现:缺失

任何人都可以告诉我,我做错了什么?

db文件结构:

{
    "_id" : "module_settings",
    "moduleChildren" : [
        {
            "_id" : "module_settings_general",
            "name" : "General",
        },
        {
            "_id" : "module_settings_users",
            "name" : "Users",
        },
        {
            "_id" : "module_settings_emails",
            "name" : "Emails",
        }
    ],
    “permissions” : [
        "module_settings_general",
        "module_settings_emails"
    ]
}
Run Code Online (Sandbox Code Playgroud)

管道阶段:

{ $project: {
    filteredChildren: {
        $filter: {
           input: "$moduleChildren",
           as: "moduleChild",
           cond: { $in : ["$$moduleChild._id", "$permissions"] }
        }
    },
}}
Run Code Online (Sandbox Code Playgroud)

我需要过滤"moduleChildren"数组以仅显示哪些ID在"权限"数组中.我试过"$$ ROOT.permissions"和"$$ CURRENT.permissions",但没有一个能正常工作.我总是得到一个错误,$ in缺少数组作为参数.当我像这样硬编码数组时它起作用:cond: { $in : ["$$moduleChild._id", [“module_settings_general", "module_settings_emails”]] }所以看起来问题在于传递数组.谢谢你的任何建议!

arrays mongodb mongodb-query aggregation-framework

4
推荐指数
1
解决办法
1589
查看次数

在mongodb中使用多个条件更新数组

我有这个文件:

{
    "_id" : ObjectId("5b673f525ef92ec6ef16504e"),
    "events" : [ 
        {
            "name" : "Winner",
            "map" : 0,
            "something" : []
        }, 
        {
            "name" : "Winner",
            "map" : 2,
            "something" : []
        }, 
        {
            "name" : "DifferentName",
            "map" : 2,
            "something" : []
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

如果我运行以下更新:

db.getCollection('test').updateOne({
    "_id": ObjectId("5b673f525ef92ec6ef16504e"),
    "events.name": "Winner",
    "events.map": 2
},
{$push: {
        "events.$.something": {
                something: "test",
        }
    }
})
Run Code Online (Sandbox Code Playgroud)

我得到了不好的结果:

{
    "_id" : ObjectId("5b673f525ef92ec6ef16504e"),
    "events" : [ 
        {
            "name" : "Winner",
            "map" : 0,
            "something" : [ 
                { …
Run Code Online (Sandbox Code Playgroud)

mongodb node.js mongodb-query

4
推荐指数
1
解决办法
2895
查看次数

投影不适用于查找查询

您好,我想通过查询排除一些字段。我正在使用 nodejs

public async getDoc() {
        return new Promise((resolve, reject) => {
            this.database.collection('users').find({email: "value3"}, {password: 0}).toArray((err, result) => {
                if(err) {
                    reject(err)
                }
                resolve(result);
            });
        })
    }
Run Code Online (Sandbox Code Playgroud)

但在结果集中我不断收到密码字段..

mongodb node.js

4
推荐指数
1
解决办法
2432
查看次数

$lookup 使用猫鼬

我有两个集合,如清单和任务。两个模式如下所示

清单架构将如下所示

{
        "_id": "5b7d0f77e231b6b530b0ee5a",
        "audit_checklist_type": "Weekly"

    },
    {
        "_id": "5b7d3f33e7a57f38084efb09",
        "audit_checklist_type": "Daily"
    }
Run Code Online (Sandbox Code Playgroud)

任务架构如下所示

    { 
        "_id": "5b7d65daf74be318e8378cf9",
        "checklist_id": "5b7d3f33e7a57f38084efb09"
    },
    {
        "_id": "5b7d662df74be318e8378cfb",
        "checklist_id": "5b7d3f33e7a57f38084efb09"
    }
Run Code Online (Sandbox Code Playgroud)

我的查询是

AuditChecklist.aggregate([
{ $match: {
  $and: [
        audit_checklist_type : "Daily"
  ]
  } },
  {
     $lookup: {
        from: 'AuditTask',
        localField: '_id',
        foreignField: 'checklist_id',
        as: 'TaskData'
     }
  },


  ]).exec();
Run Code Online (Sandbox Code Playgroud)

我正在尝试获得类似的输出

    {
        "_id": "5b7d3f33e7a57f38084efb09",
        TaskData": [
                    { 
                      "_id": "5b7d65daf74be318e8378cf9",
                      "checklist_id": "5b7d3f33e7a57f38084efb09"
                    },
                    {
                      "_id": "5b7d662df74be318e8378cfb",
                      "checklist_id": "5b7d3f33e7a57f38084efb09"
                    }
                   ]
    }
Run Code Online (Sandbox Code Playgroud)

但对我来说,由此产​​生的 TaskData 输出是空的。任何帮助是极大的赞赏。提前致谢!

mongoose mongodb aggregation-framework

4
推荐指数
1
解决办法
1万
查看次数

使用$lookup在mongodb中进行外连接

我有一个频道集合

{
  channel: "Xamper",  //unique
  subscribers: [
    ObjectId("5a934e000102030405000000"),
    ObjectId("5a934e000102030405000001"),
    ObjectId("5a934e000102030405000002")
  ]
}
Run Code Online (Sandbox Code Playgroud)

和一个 用户集合

{
  _id: ObjectId("5a934e000102030405000000"),
  name: "Bradman"
},
{
  _id: ObjectId("5a934e000102030405000001"),
  name: "Hartin"
},
{
  _id: ObjectId("5a934e000102030405000002"),
  name: "Migra"
},
{
  _id: ObjectId("5a934e000102030405000004"),
  name: "Polycor"
}
Run Code Online (Sandbox Code Playgroud)

现在我需要查找频道名称"Xamper"并计算不在subscribers数组中的用户

所以输出将是

{
  channel: "Xamper",
  unSubscribers: 1
}
Run Code Online (Sandbox Code Playgroud)

类似于SQL的外排除连接

在此输入图像描述

javascript mongoose mongodb node.js aggregation-framework

4
推荐指数
1
解决办法
3870
查看次数

Mongoose - 检查 `upsert` 是否创建了一个新文档

有没有办法知道猫鼬的upsert选项是否通过 await制作了一个新文档?基本上我想要做只是没有回调。

注意:我正在使用 findByIdAndUpdate

mongoose mongodb node.js mongodb-query

4
推荐指数
1
解决办法
1298
查看次数

将 $project 中的数组转换为字符串(聚合)

我使用 $project 操作来指定包含的字段我有以下代码:

[{
    '$lookup': {
        'from': 'users',
        'localField': 'owner',
        'foreignField': 'id'
        'as': 'user'
    }
}, {
    '$project': {
        'userName': '$user.username',
        'userId': '$user.id'
    }
}]
Run Code Online (Sandbox Code Playgroud)

我的结果如下:

[
    {
        "userName": [
            "jscode"
        ],
        "userId": [
            "5d1888d60c627764aabd8b1e"
        ]
    }
]
Run Code Online (Sandbox Code Playgroud)

我需要将userIduserName结果从数组转换为字符串, 如下所示:

[
    {
        "userName": "jscode" ,
        "userId": "5d1888d60c627764aabd8b1e"
    }
]
Run Code Online (Sandbox Code Playgroud)

谢谢 :)

mongoose mongodb node.js aggregation-framework

4
推荐指数
1
解决办法
4051
查看次数