【发布时间】:2017-09-07 20:11:14
【问题描述】:
在这个猫鼬功能上苦苦挣扎。我正在尝试在另一个嵌入对象中添加一个嵌入对象,但它将新的出价对象添加到错误的位置 - 我为迭代器创建的新列表变量。
我的 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);
})
}
}
})
});
};
【问题讨论】:
-
你到底想在这里做什么?您希望将 newBid 放置在哪里?尝试提供更多详细信息
-
我有一个嵌入列表的用户集合。所以 1 个用户可以有很多列表。然后每个列表可以有许多嵌入列表中的投标(响应)。由于它的设置方式,当一个人响应出价时,该函数将搜索该列表的位置(嵌入在用户中),一旦找到该列表,该出价对象将被推送到该列表对象中,这是嵌入在该用户对象中。我的问题是它没有推入原始列表数组,而是被推入我为迭代器创建的列表变量数组中
-
如果您的变量名发生冲突,则只需重命名其中一个。
let userListings = users[i].listings -
你有一个叫做
req.user的东西,你用它来通过id查找用户,这看起来也有点有趣。但你只是发出获取用户的请求,这样你就可以得到用户id.. 你不是已经在req.user或req.user.id中拥有用户ID 了吗? -
好吧,我的 for 循环正试图找到要更新的确切清单,所以我认为分配它们的操作把它们弄乱了。例如,如果列表是
users[2].listings[10].bids,我如何获取该对象以便更新它?
标签: javascript node.js mongoose scope