问题描述
我的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
}
然后,您可以使用 $push
运算符是这样的:
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的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!