【发布时间】:2014-12-06 21:04:00
【问题描述】:
我正在尝试更新文档中的数组并且它可以正常工作,但是当我想使用 upsert 添加新元素时如何运行错误。我在google上搜索了几个小时,mongodb文档和我尝试过的都无法操作。
集合的结构是:
{
"name" : String,
"providerId": Number,
"description": String,
"providers": [
{
"merchantId": String,
"name": String,
"valid": Boolean,
"data": String
},
{
"merchantId": String,
"name": String,
"valid": Boolean,
"data": String
},
{
"merchantId": String,
"name": String,
"valid": Boolean,
"data": String
}
]
}
使用此查询更新现有数据:
db.collection.update( { "providerId": ID, "providers": { $elemMatch: { "merchantId": MERCHANTID }}}, { $set: {
"providers.$.merchantId": MERCHANTID,
"providers.$.name": NAME,
"providers.$.valid": true,
"providers.$.data": DATA
}});
这工作正常且正确地更新了我的数组元素。我想在元素不存在时添加它,而不知道是否有项目,但如果可能的话,探测以添加 upsert ( { upsert: true } ) 参数,但给我以下错误。我认为是因为它没有返回任何对象搜索。
这是错误:
MongoError:位置运算符未从查询中找到所需的匹配项。未扩展更新:providers.$.name
有没有办法更新数组中子文档中的数据,并且如果它们不存在则与添加新的兼容?我尝试使用运算符 $in 进行搜索,但它给了我错误;还探测以不同方式进行搜索({ "providers.merchantId": MERCHANTID } )和其他方式。
谢谢
【问题讨论】:
-
您能否告诉我“providers.$.merchantId”中的 $ 被称为或记录了什么?我遇到了一些奇怪的问题,并试图弄清楚它到底是做什么的。
标签: arrays mongodb mongoose mongodb-query