我在使用MongoDB的TypeScript中工作,我正在尝试将一个项添加到数组中。
registeredUsers.update({ guid: ObjectId(req.cookies._id) }, {
$addToSet: {
favorites: [comicID]
}
});
这是我目前的代码,我正在尝试将comicID
添加到favorites
中名为registeredUsers
的数组中。目前它似乎根本没有添加到数组中,所以当我尝试查看数组时它是空的。
答案 0 :(得分:0)
您的代码似乎很好。我怀疑您没有获得更新的原因是因为您的搜索条件与任何文档都不匹配。
您是否尝试过以下声明:
db.registeredUsers.find({ guid: ObjectId(req.cookies._id) })
如果您的搜索条件有效,则应该返回“所需”文档。
以下是我的例子:
首先创建一个doc。
> db.registeredUsers.insert({ "mycustom_id":1, "favorites":[1,2,3]})
WriteResult({ "nInserted" : 1 })
检查文档是否正确。
> db.registeredUsers.find()
{ "_id" : ObjectId("56f88aa1d14e4832a027f625"), "mycustom_id" : 1, "favorites" : [ 1, 2, 3 ] }
根据我定义的其中一列进行更新。
> db.registeredUsers.update({"mycustom_id" : 1}, { $addToSet: { favorites: 5}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
检查更新结果:
> db.registeredUsers.find()
{ "_id" : ObjectId("56f88aa1d14e4832a027f625"), "mycustom_id" : 1, "favorites" : [ 1, 2, 3, 5 ] }
现在,根据“_id”字段进行更新。
> db.registeredUsers.update({"_id": ObjectId("56f88aa1d14e4832a027f625") }, { $addToSet: { favorites: 6}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
检查结果:
> db.registeredUsers.find()
{ "_id" : ObjectId("56f88aa1d14e4832a027f625"), "mycustom_id" : 1, "favorites" : [ 1, 2, 3, 5, 6 ] }
预计更新会创建数组的另一个示例:
> db.registeredUsers.insert({"a": 1})
WriteResult({ "nInserted" : 1 })
> db.registeredUsers.find()
{ "_id" : ObjectId("56f88aa1d14e4832a027f625"), "mycustom_id" : 1, "favorites" : [ 1, 2, 3, 5, 6 ] }
{ "_id" : ObjectId("56f88be6d14e4832a027f626"), "a" : 1 }
在更新之前不存在数组收藏夹的情况下,再次基于“_id”进行更新
> db.registeredUsers.update({"_id" : ObjectId("56f88be6d14e4832a027f626")}, { $addToSet: { favorites: 6}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
检查结果:
> db.registeredUsers.find()
{ "_id" : ObjectId("56f88aa1d14e4832a027f625"), "mycustom_id" : 1, "favorites" : [ 1, 2, 3, 5, 6 ] }
{ "_id" : ObjectId("56f88be6d14e4832a027f626"), "a" : 1, "favorites" : [ 6 ] }
正如您所看到的,我的查询与您的查询完全相同。你正在比较“guid”,我正在比较“_id”。我怀疑“guid”不包含你期望它包含的内容,这导致你的“搜索条件”更新返回0文档,因此