在使用 Passport 注册后将表示用户的对象添加到数组中
adding an object that represents users to an array after signup using passport
我正在尝试列出用户名和密码,以便当用户使用其凭据登录时,他们可以看到其他人看到的所有数据,但他们仍然必须使用自己的凭据。我想列出这样的对象列表users : [{username : "user1", password : "pass1"}, {username : "user2", password : "pass2"}]
.这应该在注册时创建。我虽然子文档会有所帮助,但我没有得到我想要的。我有这个:
var userlist = new mongoose.Schema({username: String, password : String })
var userSchema = new mongoose.Schema({
users : [userlist]
})
我尝试将新用户添加到数组中,如下所示:
app.post("/signup", function(req, res){
var user = new User;
user.users.push({username : req.body.username, password : req.body.password})
user.save(function(err){
if(err) return handleError(err);
console.log("success")
})
// User.create(users : [{username : req.body.username, password : req.body.password}], function(err, doc){
// console.log(doc);
// })
res.redirect("/login")
})
这给了我这个
> db.users.find().pretty()
{
"_id" : ObjectId("56ba6219763de71c03199a70"),
"users" : [
{
"username" : "user1",
"password" : "pass1",
"_id" : ObjectId("56ba6219763de71c03199a71")
}
],
"__v" : 0
}
{
"_id" : ObjectId("56ba6225763de71c03199a72"),
"users" : [
{
"username" : "user2",
"password" : "pass2",
"_id" : ObjectId("56ba6225763de71c03199a73")
}
],
"__v" : 0
}
>
它正在制作单独的文档。我希望它看起来像这样
{
"_id" : ObjectId("56ba6219763de71c03199a70"),
"users" : [
{
"username" : "user1",
"password" : "pass1",
"_id" : ObjectId("56ba6219763de71c03199a71")
},
{
"username" : "user2",
"password" : "pass2",
"_id" : ObjectId("56ba6225763de71c03199a73")
}
],
"__v" : 0
}
在子文档中拥有对象ID对我来说并不那么重要。我只想将所有用户分组在一起,以便当他们登录时,我可以做一些事情,例如如果文档在那里,凭据很好,所以继续到网站的其他部分。
我不确定你现在是否已经解决了你的问题,不管这里是你问题的答案。
首先,如果您不需要_id
subdocument
则相应地在schema
中声明,并且不会创建任何_id
。
var userSchema = new Schema({ username: String, password: String},{ _id: false });
如果您使用上述schema
进行user
则subdocument
中应该没有_id
字段。
您应该知道,要插入subdocument
您需要知道它的parent
。如果您在插入subdocument
时没有提供parent
,则每次插入都会创建一个新的 p a
租金。在这种情况下,父文档包含_id
和子文档users
。如果我有确切的问题,我会通过以下方式解决它:
架构设计保持不变,如下所示(为了避免混淆,我以不同的方式命名它们(:
var userSchema = new Schema({username: String, password: String},{ _id : false });
var userListSchema = new Schema({
users: [userSchema]
});
现在我将声明父模型如下:
var UserList = mongoose.model('UserList', userListSchema);
//see below what list gets assigned.
var list;
现在让我们假设我有一个路由处理程序,我想在注册时继续添加用户,如下所示:
app.get("/newuser/:username/:password", function(req, res) {
//create user model
var User = mongoose.model('User', userSchema);
//load user module, for testing i use params, you can change this to req.body
var user = new User({username: req.params.username, password: req.params.password});
//I would like to find the first document in userlists collection
UserList.findOne({}, function(err, result) {
if(err) console.log(err);
//below if condition is true, if there is one document with users subdoc
if(result) {
console.log('Found existing document with users subdocument. Adding user to array.')
//assign the parent where the subdoc should be inserted to list
list = result;
//there already is a document with subdocument users, so append to it
list.users.push(user);
//save the changed list.
list.save(function(err) {
if (err) console.log(err);
console.log('User saved.');
});
} else {
console.log('No document found. Creating one and adding this user to users subdocument.');
// initialize list model with first ever user
list = new UserList({ users: [user] });
//save the new changed list
list.save(function(err) {
if (err) console.log(err);
console.log('User saved.');
});
}
})
});
做。现在,当我运行该应用程序并首次访问以下URL时
http://127.0.0.1:8080/newuser/user1/pass1
userslist
集合如下所示:
> db.userlists.find().pretty();
{
"_id" : ObjectId("56c349d6479f5b9b1eaea1c8"),
"users" : [
{
"password" : "pass1",
"username" : "user1"
}
],
"__v" : 0
}
我想访问带有不同参数的链接,如下所示:
http://127.0.0.1:8080/newuser/user2/pass2
集合的输出如下所示:
{
"_id" : ObjectId("56c349d6479f5b9b1eaea1c8"),
"users" : [
{
"password" : "pass1",
"username" : "user1"
},
{
"password" : "pass2",
"username" : "user2"
}
],
"__v" : 1
}
现在,我终止应用程序,然后重新运行应用程序并访问以下 url:
http://127.0.0.1:8080/newuser/user7/pass7
集合的输出如下所示:
{
"_id" : ObjectId("56c349d6479f5b9b1eaea1c8"),
"users" : [
{
"password" : "pass1",
"username" : "user1"
},
{
"password" : "pass2",
"username" : "user2"
},
{
"password" : "pass7",
"username" : "user7"
}
],
"__v" : 2
}
给你。看到userlists
集合总是总是有一个document
并且它的数组会不断扩展,我感到很遗憾,也许不是以这种方式解决您的问题的好习惯。如果我是你,我会将每个用户存储为单个record
然后执行分组依据或任何其他aggregation
操作。
- 如果使用 lodash 将属性存在于另一个对象中,则向对象添加属性
- Meteor-将选定窗体中的对象添加到集合中
- 在play2框架中向json对象添加下拉列表项
- 如何在javascript上向数组的对象添加新元素
- JSON到对象数组,并向每个对象添加项
- 如何将一个对象添加到每个对象数组中
- 向Angular作用域对象添加对象数组——TypeError
- CoffeeScript将对象添加到数组中
- 如何从Addon SDK向选项卡对象添加进度侦听器
- 使用ja将对象添加到HTML画布中
- 向通过ReST JSON调用生成的Angular Javascript对象添加方法
- 将新对象添加到本地存储
- 为什么可以'我们在函数体中为函数对象添加属性,就像在javascript中为对象文字添加属性一样
- 使用游标循环将JS对象添加到数组中
- 向调用全局javascript函数的对象添加处理程序
- 将另一个文件中的对象添加到单独文件中的阵列中
- 将对象添加到数组中
- 为新对象添加函数,将对象添加到数组中.理解困难'这'关键字
- sequelize为找到的对象添加值
- 向对象添加新方法和值,同时避免重复