gpt4 book ai didi

javascript - 如何从外部函数更新对象?

转载 作者:行者123 更新时间:2023-11-30 21:11:18 24 4
gpt4 key购买 nike

与这个 Mongoose 功能作斗争。我正在尝试将一个嵌入对象添加到另一个嵌入对象中,但它会将新的出价对象添加到错误的位置——我为迭代器创建的新列表变量。我的 for 循环试图找到要更新的确切列表,所以我认为分配它们的操作会把它们搞砸。例如,如果列表是 users[2].listings[10].bids ,我如何到达该对象以便更新它?

 function create(req, res) {
db.Listing.findById(req.params.listingId, function(err, foundListing) {
// console.log(foundListing._id );
if (err) {
console.log('Error', err);
}
// res.json(foundListing);
// get array of all users
db.User.find({}, function(err, users) {
// for loop iterates through all users' listings
for (let i = 0; i < users.length; i++) {
let listings = users[i].listings
// for loop iterates through all listings ids
for (let j = 0; j < listings.length; j++) {
// finds match
// comparing _id with _id returning false. Not sure why, will return later
if (listings[j].topic === foundListing.topic && listings[j].created === foundListing.created) {
console.log("Found match: " + foundListing.topic);
// get current user id to add to bid object
db.User.findById(req.user, function(err, user) {
if (err) {
console.log(err);
}
var newBid = new db.Bid(req.body); // add data validation later
newBid.uid = user._id
// pushes new bid object into embedded listing
listings[j].bids.push(newBid);
listings[j].save(function(err, savedBid) {
console.log('newBid created: ', newBid);
console.log(listings[j]);
res.json(newBid);
});
});
}
}
}
})
if (err) {
console.log(err);
}
});
};

编辑 - 到目前为止,但现在我的数组似乎没有保存。

function create(req, res) {
db.Listing.findById(req.params.listingId, function(err, foundListing) {
if (err) {
console.log('Error:', err);
}
db.User.findOne({ 'listings._id': req.params.listingId }, function(err, foundUser) {
// console.log(foundUser.listings);
if (err) {
console.log('Error: ', err);
}
for (let i = 0; i < foundUser.listings.length; i++) {
// console.log(foundUser.listings[i]._id);
if (foundUser.listings[i]._id == req.params.listingId) {
console.log( 'found it! - ' + foundUser.listings[i].topic);
var newBid = new db.Bid(req.body);
// console.log(newBid)
foundUser.listings[i].bids.push(newBid);
console.log(foundUser.listings[i].bids)
foundUser.listings[i].save(function(err, savedListing) {
// console.log(foundUser.listings[i])
if (err) {
console.log('Error: ', err);
return;
}
console.log('newBid created: ', newBid);
console.log('savedListing', savedListing);
res.json(newBid);
})
}
}
})
});
};

最佳答案

您的代码很难掌握。我认为您可能使用了错误的工具来解决问题。 MongoDb 和 Mongoose 似乎具有非常高级的查询功能,因此您可以指定您感兴趣的确切用户、列表等。

我认为值得花时间看一下 Mongoose queriesMongoDb queries 的文档。 . 用于 db.User.findOne({ 'listings.id': req.params.listingId } 中的 listings.iddescribed here .

我无法真正测试这段代码是否可以编译或者它是否可以工作,因为我对你的数据库模型等了解不够,但是沿着这些方向的一些事情应该是可能的:

 function create(req, res) {
db.Listing.findById(req.params.listingId, function(err, foundListing) {
// use the power of mongo db and mongoose.
// you can specify more exactly what you're looking for
// in this case we're interested in ONE user that
// has a listing with a specific id
// (if you still problems with comparing identical IDs, then that's a serious issue..
// maybe try logging req.params.listingId and check if it really exists
// in your database.)
db.User.findOne({ 'listings.id': req.params.listingId }, function(err, foundUser) {
var newBid = new db.Bid(req.body); // add data validation later
newBid.uid = foundUser._id

// Old code: foundListing.bids.push(newBid)

// Change according to first question/answer at http://mongoosejs.com/docs/faq.html
// which was linked in the thread you linked to in comment.
// The essence is that Mongoose doesn't get
// notified about changes to arrays by default
// To get around this you can update using "set"
// but then you need both a value and an index:
var oldBidsLength = foundListing.bids.length;
foundListing.bids.set(oldBidsLength, newBid);

foundListing.save(function(err, savedBid) {
// savedBid = saved LISTING?
console.log('newBid created: ', newBid);
console.log('savedBid', savedBid);
res.json(savedBid);
}
}
})
});
};

此代码示例中可能存在的问题是 if db.User.findOne({ 'listings.id': req.params.listingId } should be used with listings ._id。我对你的模型了解不够。

关于javascript - 如何从外部函数更新对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46104360/

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