在猫鼬的数组内使用$ push [英] Using $push within Array in mongoose

查看:60
本文介绍了在猫鼬的数组内使用$ push的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的NetworkSchema中有一个数组,我试图使用猫鼬中的 findOneandupdate 用另一个条目进行更新

i have an array inside my NetworkSchema which i am trying to update with another entry using findOneandupdate in mongoose

我的模型:

var mongoose = require('mongoose'),
Schema = mongoose.Schema;

var NetworkSchema = new Schema({

UserID: {
    type: String,
    default: '',
    trim: true
},
NetworkList: [{
    Fid: {

        type: Schema.ObjectId,
        ref: 'User'
    }
}]});

HTML

<div ng-controller="AuthenticationController" style="margin-top: 50px">

<div ng-controller="NetworksController">
    <ul>

        <li ng-repeat="Network in Networkfriends">

            {{Network.firstName}}
            <button type="submit" class = "btn btn-default" data-ng-click="update(Network._id)">Add as a Friend</button>
        </li>
    </ul>
    <button type="submit" ng-click="showlist()">show</button>
</div>
</div>

网络控制器:

$scope.update = function(FriendID)
    {
        var UserID = this.authentication.user._id;
        console.log('User ID :' +UserID);
        var NetworkList = [{

            Fid: this.FriendID
        }];

        $http.post('/networks/update',{UserID: UserID, FriendID: FriendID}, $scope.credentials).success(function(response){
            console.log(JSON.stringify(response));

        });
}

Network.Server.Controller:

var mongoose = require('mongoose'),
    errorHandler = require('./errors.server.controller'),
    Network = mongoose.model('Network'),
    _ = require('lodash');
    util = require('util');

exports.update = function(req, res) {

var query={'UserID':req.body.UserID};


var NetworkList = [{Fid: req.body.FriendID}];
var update = {'NetworkList' :NetworkList};


Network.findOneAndUpdate(query,update,function(err){
    if (err) {
        return err;
    } else {
        NetworkList.push(req.body.FriendID);

    }
});
};

我想从 usersList 添加用户的objectID,这是我从HTML网页上从NetworkFriends获取的,就像我在上面看到的,只要我单击添加为朋友按钮,我得到的是数据库中有NetworkFriendObjectID的新条目,我希望通过添加为朋友按钮

i want to add the objectID of user from usersList which i am getting from NetworkFriends in my HTML page as you can see above, whenever i click Add as a Friend button and what i am getting is a new entry in my database with ObjectID of NetworkFriend and i want comma separated objectID's of more than one NetworkFriend through Add as a Friend button

这是我的数据库"中的条目:

{
"NetworkList" : [ 
    {
        "Fid" : ObjectId("5486fab40bc27314276be8cf"),
        "_id" : ObjectId("548d6ed5d6994cac219f536f")
    }
],
"UserID" : "547eaaab6c39471c3f5aebb6",
"__v" : 0,
"_id" : ObjectId("548adbc8b7eac44013bf188d")

}

我的目标是:

 {
"NetworkList" : [ 
    {
        "Fid" : ObjectId("5486fab40bc27314276be8cf"),"(objectID of another friend with comma separated like this"),
        "_id" : ObjectId("548d6ed5d6994cac219f536f")
    }
],
"UserID" : "547eaaab6c39471c3f5aebb6",
"__v" : 0,
"_id" : ObjectId("548adbc8b7eac44013bf188d")

}

推荐答案

您要使用的结构不是有效的结构.您可能想要的是一个架构,其中NetworkList直接包含用户朋友的ObjectId数组:

What you're aiming for isn't a valid structure. What you likely want instead is a schema where NetworkList directly contains an array of ObjectIds of the user's friends:

var NetworkSchema = new Schema({
    UserID: {
        type: String,
        default: '',
        trim: true
    },
    NetworkList: [{
        type: Schema.ObjectId,
        ref: 'User'
    }]
});

您的文档将如下所示:

{
    "_id" : ObjectId("548adbc8b7eac44013bf188d"),
    "NetworkList" : [ 
        ObjectId("5486fab40bc27314276be8cf") 
    ],
    "UserID" : "547eaaab6c39471c3f5aebb6",
    "__v" : 0
}

然后,您可以使用

Then you can add a new friend to NetworkList using the $push operator like this:

exports.update = function(req, res) {
    var query={'UserID': req.body.UserID};
    var update = {$push: {'NetworkList': req.body.FriendID}};

    Network.findOneAndUpdate(query, update, function(err, doc){ ... });
};

这篇关于在猫鼬的数组内使用$ push的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆