【问题标题】:Add and Remove Within Mongoose在 Mongoose 中添加和删除
【发布时间】:2016-05-21 08:49:47
【问题描述】:
{
    "_id" : 1,
    "_name" : "peter",
    "favourites" : [ 
        {
            "user_id" : 1
        }, 
        {
            "user_id" : 2
        }
    ]
}

我在 Mongo 中有这个架构,我正在使用 Node/Express/Mongoose 来管理我的堆栈。我是这个特定堆栈的新手,我正在构建的网站上有一个“收藏夹”按钮。在收藏夹中添加/删除的最佳方式是什么?

我真的需要设置两条路由,一条用于 POST,另一条用于 PUT?我不确定解决这个特定问题的最佳方法是什么,我进行了一些搜索,但没有找到任何相关的

【问题讨论】:

    标签: node.js mongodb express mongoose


    【解决方案1】:

    我不会给你完整的答案,因为它总是很好学,所以我已经给了你 90% 的我认为你正在寻找的东西。检查名称,如果收藏夹数组中不存在该名称,请执行以下操作:

    db.collection.update(
        { "username": "walterwhite" },
        {  $push: 
            { 
                favourites: [ { "user_id": "7" } ]
            } 
        } 
    )
    

    【讨论】:

    • 这正是我想要的,“PUSH”!
    【解决方案2】:

    首先,您将需要任何操作的路线。使用HTTP Verbs(GET/POST/PUT/DELETE 等)可能是最佳实践。然后你的路由看起来像这样:(这可以包含在一个包含所有路由的文件中,然后在主应用程序文件(例如 app.js)中包含 required。)

    module.exports = function (router) {
    
    router.route('/favourites')
            .get(function (req, res, next) {
                // Code for getting all items
            })
    
            .post(function (req, res, next) {
                // Code for inserting new item
            })
    
            .delete(function (req, res, next) {
                // Code for deleting an item
            });
    }
    

    然后您需要构建一个包含与项目属性对应的字段的表单,并使用POST 作为提交方法。您将需要它来插入(添加)新项目。从表单发送的请求会将您发送到 post 路由,您将在其中处理将项目附加到列表的逻辑。
    要实现删除,您必须发送DELETE,请求传递您要删除的项目的标识符。您将在 delete 路由中处理此代码。
    当然,get 路由是用于获取集合中的所有项目以进行进一步处理或可视化。

    【讨论】:

    • 这更清楚了,但最后一个问题,我如何发布到文档中?我想添加到收藏夹数组并从那里删除。
    • 您必须定义一个Mongoose Schema,然后您就可以像使用任何普通的 JS 对象一样使用集合中的项目。这是 Scotch 网站上的 good article,关于开发基本的 CRUD 功能。
    • 好的,但目前我已经有了 Mongoose 模式。但是如果我使用 POST,我不想为我正在做的事情创建一个新模式,我只想发布到该模式中的一个数组。
    • 看看苏格兰威士忌的文章。这是您需要的一个很好的例子;)
    • 在您加载项目的情况下,只需使用item.favourites.push({ user_id: 3 });
    【解决方案3】:

    您必须创建一个与每个 user_id 关联的object id。你可以使用创建这样的id。你可以将多个模型与猫鼬population

    var Schema = mongoose.Schema;
    var ObjectId = Schema.ObjectId;
    
    
    "favourites" : [ 
        {
            "_id" : ObjectId("57338c9cc5c8cf74181b4cff"),
            "user_id" : 1
        }, 
        {  
            "_id" : ObjectId("5734588e5a54d45434693a09")
            "user_id" : 2
        }
    ]
    

    根据您的设置呈现页面或发送带有对象 ID 的 json 对象作为响应。

    <a href="#" id="5734588e5a54d45434693a09">user_id-2</a> 
    <a href="#" id="57338c9cc5c8cf74181b4cff">user_id-1</a> 
    

    现在您可以在单击特定&lt;a&gt; 标记时使用对象ID 发出ajax 请求。您可以使用jquery 来实现此目的。然后从您的收藏夹中删除与该 ID 关联的用户。

    如果你添加更多细节。我可以给你一个具体的答案。

    【讨论】:

    • 不能只通过user_id查询吗?
    • 是的,你可以。如果 user_id 是唯一的。而不是发送对象 id 你发送 user_id。
    猜你喜欢
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 2023-04-11
    • 1970-01-01
    • 1970-01-01
    • 2021-10-14
    • 2018-06-12
    • 1970-01-01
    相关资源
    最近更新 更多