gpt4 book ai didi

javascript - 编辑数组中对象的值

转载 作者:行者123 更新时间:2023-12-03 02:23:22 25 4
gpt4 key购买 nike

我有这个对象:

{
"_id" : ObjectId("5a8d83d5d5048f1c9ae877a8"),
"websites" : [
"",
"",
""
],
"keys" : [
{
"_id" : ObjectId("5a8d83d5d5048f1c9ae877af"),
"name" : "Google",
"value" : ""
},
{
"_id" : ObjectId("5a8d83d5d5048f1c9ae877ae"),
"name" : "Built With",
"value" : ""
},
{
"_id" : ObjectId("5a8d83d5d5048f1c9ae877ad"),
"name" : "Check Host",
"value" : ""
},
{
"_id" : ObjectId("5a8d83d5d5048f1c9ae877ac"),
"name" : "Alexa",
"value" : ""
},
{
"_id" : ObjectId("5a8d83d5d5048f1c9ae877ab"),
"name" : "Facebook",
"value" : ""
},
{
"_id" : ObjectId("5a8d83d5d5048f1c9ae877aa"),
"name" : "Instagram",
"value" : ""
},
{
"_id" : ObjectId("5a8d83d5d5048f1c9ae877a9"),
"name" : "Moz",
"value" : ""
}
],
"username" : "admin@admin",
"isPremium" : false,
"accType" : "admin",
"hash" : "very long hash",
"salt" : "long salt",
}
现在。使用 NodeExpress 和 Mongoose,我需要能够编辑 keys 数组内每个对象的 value 字段。

我的GET操作是这样的:

// GET: /websites/:_id - show edit form
router.get('/keys/edit/:_id', isAdmin, function(req, res, next) {
// console.log('tada');
// console.log(req.params._id);

Account.findOne({ _id: req.user._id }, function(err, user) {
var selectedKey = findById(user.keys, req.params._id);
// var keys = user.keys.findOne(req.params._id);
console.log(selectedKey);
res.render('admin/edit', {
title: 'Edit websites',
user: req.user,
value: selectedKey.value,
});
});
});

该应用程序的工作原理是:管理员登录。他会看到所有用户并选择他想要修改的用户,然后管理员会看到所有 key 。我将附上屏幕截图以更清楚地解释它。

enter image description here

enter image description here

enter image description here

现在。我想我知道我需要做什么,但我不知道如何将其转换为代码。

我认为我需要:查找数组元素的索引,就像在 GET 请求中一样,用发布的值更新该值。我想我需要找到数组中的索引。

但正如我所说,我不知道该怎么做。

我的帖子现在看起来像这样:

// POST: /keys/edit/_id - save updates
router.post('/keys/edit/:_id', isAdmin, function(req, res, next) {
var p = req.params;
var b = req.body;
Account.findOne({ _id: req.user._id }, function(err, user) {
var selectedKey = findById(user.keys, req.params._id);
// console.log('Key value: ' + req.body.keyValue);
// console.log('Selected key: ' + selectedKey);
console.log('id:' + req.params._id);
if (err) {
console.log(err);
} else {
console.log(user);
user.keys.set(req.params._id, req.body.keyValue);
user.save(err => {
if (err) {
console.log(err);
} else {
console.log('all good');
}
res.redirect('/admin');
});
}
});

编辑:所以我已经研究了一段时间,然后我发现了这一点。我正在使用正确的用户,我正在抓取内部的键数组,但我不知道如何在数组中找到我需要编辑的(对象)对象的 id。

存在大量嵌套,这可能会导致一些问题。

编辑2:我正在攻击我的帐户模型。早些时候忘记了。抱歉。

var mongoose = require('mongoose');

var website = require('./website');

var plm = require('passport-local-mongoose');

var accountSchema = new mongoose.Schema({
isPremium: Boolean,
accType: String,
websites: [],
keys: [
{ name: String, value: String },
{ name: String, value: String },
{ name: String, value: String },
{ name: String, value: String },
{ name: String, value: String },
{ name: String, value: String },
{ name: String, value: String },
],
});

accountSchema.plugin(plm);

module.exports = mongoose.model('Account', accountSchema);

最佳答案

您可以使用 $positional 以原子方式执行更新运算符。

您包含 keys 中的字段 (_id) 来定位元素的索引,并将占位符 ($) 替换为找到的更新部分中查询部分的索引,用于设置中的

 router.post('/keys/edit/:_id', isAdmin, function(req, res, next) {
var p = req.params;
var b = req.body;
Account.findOneAndUpdate(
{_id: req.user._id,'keys._id':req.params._id },
{$set:{'keys.$.value':req.body.keyValue}},
{new: true},
function(err, account) {}
);

关于javascript - 编辑数组中对象的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49060454/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com