Node.js mongoose:无法使尚未添加到数组的子文档无效
当我尝试向公司模型中添加位置时,我得到了这样一个结果:无法使尚未添加到数组中的子文档无效。 我的模式如下所示:Node.js mongoose:无法使尚未添加到数组的子文档无效,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,当我尝试向公司模型中添加位置时,我得到了这样一个结果:无法使尚未添加到数组中的子文档无效。 我的模式如下所示: var companySchema = new Schema({ name: String, description: String, locations: [{ address: String, loc: { type: [Number], index: '2d'
var companySchema = new Schema({
name: String,
description: String,
locations: [{
address: String,
loc: {
type: [Number],
index: '2d'
}
}],
});
执行添加位置的更新
// I am very unsure if I can creata a location this way
var newLocation =
{
address: address,
loc:
{
type: [long, lat]
}
};
CompanyModel.findByIdAndUpdate(
company_id,
{ $push: { locations: newLocation } },
{new: true},
function(err, updatedCompany) {
if(err) throw err;
if(!updatedCompany)
{
res.sendError({
error: 'INVALID_COMPANY_ID'
});
}
else
{
res.sendSuccess({
data:
{
company: updatedCompany
}
});
}
});
你知道我为什么会收到这个错误吗?我没有收到堆栈跟踪。作为您实际问题的侧栏,我建议您不要在此处将地理位置数据存储在子文档数组中。问题在于,尽管MongoDB可以在数组中“查找”最近的包含地理空间数据的文档,但它不能“排除”数组中“不靠近”查询位置的项(或就这一点而言,
$geointen
)。例如,阵列同时存储“纽约”和“东京”位置数据。有人问“新泽西”,这里离“纽约”很近,但离“东京”不远。但完整的文档被重新发布。没办法,我来回答你的问题。你的var是错误的。应该是{address:address,loc:[long,lat]}“类型”是mongoose模式的定义,而不是文档本身的结构。您好,谢谢您的回答。如果你有时间,你能更详细地解释一下为什么它不好吗?我是这样理解的:一家公司有两个办公室。一个在纽约,一个在东京。当我想让所有公司都接近一个住在纽约的用户时,我不能将tokyos office排除在结果之外?最好只匹配“纽约”。如果“长岛”在那里,那么这将被忽略。该技术需要聚合管道,特别是其他聚合技术。但这是一个与你所问的不同的问题。我先前的评论回答了这个问题。您以与架构不匹配的方式错误地声明了要$push
的对象。这是你的错误。也不是一个真正的参考帮助点,因此也不是一个答案。Doodlemeat,你能在下面添加一个总结Blakes Seven解决方案的答案吗?我不知道这对未来的读者是否有帮助?作为您实际问题的侧边栏,我建议您不要在这里将地理位置数据存储在子文档数组中。问题在于,尽管MongoDB可以在数组中“查找”最近的包含地理空间数据的文档,但它不能“排除”数组中“不靠近”查询位置的项(或就这一点而言,$geointen
)。例如,阵列同时存储“纽约”和“东京”位置数据。有人问“新泽西”,这里离“纽约”很近,但离“东京”不远。但完整的文档被重新发布。没办法,我来回答你的问题。你的var是错误的。应该是{address:address,loc:[long,lat]}“类型”是mongoose模式的定义,而不是文档本身的结构。您好,谢谢您的回答。如果你有时间,你能更详细地解释一下为什么它不好吗?我是这样理解的:一家公司有两个办公室。一个在纽约,一个在东京。当我想让所有公司都接近一个住在纽约的用户时,我不能将tokyos office排除在结果之外?最好只匹配“纽约”。如果“长岛”在那里,那么这将被忽略。该技术需要聚合管道,特别是其他聚合技术。但这是一个与你所问的不同的问题。我先前的评论回答了这个问题。您以与架构不匹配的方式错误地声明了要$push
的对象。这是你的错误。也不是一个真正的参考帮助点,因此也不是一个答案。Doodlemeat,你能在下面添加一个总结Blakes Seven解决方案的答案吗?我不知道这对未来的读者是否有帮助?