gpt4 book ai didi

mongodb - 使用 $elemMatch 更新 mongodb 嵌入式文档

转载 作者:可可西里 更新时间:2023-11-01 10:44:11 25 4
gpt4 key购买 nike

我有一个包含嵌入式文档数组的模型。

var CourseSchema = mongoose.Schema({
invitations: [InvitationSchema],
total:Number
});

var InvitationSchema = new mongoose.Schema({
token: { type:String, required: true},
email: String
});

想通过匹配请求中嵌入的邀请数组的 token 来更新/增加邀请总数,这里我遵循了http://diogogmt.wordpress.com/2012/03/23/update-elementmatch-and-the-positional-operator-on-mongodbmongoose/中的教程。

所以我试过了

var options = { new: false , select:'_id'};
CourseModel.update({'_id':id,'invitations':{'$elemMatch':{'token':token}}},{'$inc':{'total':1}},options,function(err,data) {
if(err){callback(err, null);}
else{
callback(null, data);
}
})

但它不起作用,如果我删除 'invitations':{'$elemMatch':{'token':token}},查询将起作用

最佳答案

根据 documentation $elemMatch 只能用于投影。但我发现了一个 example它说明了 $elemMatch 与 $all 的结合使用。试试这个。

1) 我通过以下方式在集合中创建了一个文档:

db.testColl.insert({count:0,arr:[{token:'xya'},{token:'xyb'},{token:'xyc'},{token:'xyd'},{token:'xye'}]})

2) 然后我使用不带

的查找命令
db.testColl.find()

输出:

{ "_id" : ObjectId("52345478ef5f122b1c9c54be"), "count" : 0, "arr" : [  {   "token" : "xya" },  {   "token" : "xyb" },  {   "token" : "xyc" },  {   "token" : "xyd" },  {   "token" : "xye" } ] }

3) 然后我依次运行以下命令:

db.testColl.update({arr:{$elemMatch:{token:'xya'}}},{'$inc':{'count':1}})
db.testColl.update({arr:{$elemMatch:{token:'xyb'}}},{'$inc':{'count':1}})
db.testColl.update({arr:{$elemMatch:{token:'xyc'}}},{'$inc':{'count':1}})
db.testColl.update({arr:{$elemMatch:{token:'xyd'}}},{'$inc':{'count':1}})
db.testColl.update({arr:{$elemMatch:{token:'xye'}}},{'$inc':{'count':1}})

4) 现在,db.testColl.find() 给了我所需的正确输出:

{ "_id" : ObjectId("52345478ef5f122b1c9c54be"), "count" : 5, "arr" : [  {   "token" : "xya" },  {   "token" : "xyb" },  {   "token" : "xyc" },  {   "token" : "xyd" },  {   "token" : "xye" } ] }

那么,您的查询似乎没问题!!!

关于mongodb - 使用 $elemMatch 更新 mongodb 嵌入式文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18798035/

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