我正在学习Mongo,但遇到了一个棘手的问题。这是针对一堂课的,因此尽管使用Mongoose可能会更容易(或可能不会),但我们应该使用Mongo来实现。
我正在制作一个简单的应用程序来处理各种用户的联系人。该集合将包含一个由多个用户组成的数组,每个用户将具有一个联系人数组,并且这些联系人数组将包含带有各种字符串的对象数组。
users: [
user: {
contacts: [
contact: {
name:"a string"
}
]
}
]
我想要做的是拥有一个函数updateContact
,我将向其中传递username
和一个contact
对象。仅当且仅当该联系人的contacts
字段上没有匹配项时,该函数才会将联系人添加到用户的name
数组中,但如果name
字段上存在匹配项,该函数将向该用户的contact
数组中添加联系人更新匹配的联系人对象中的信息。
我可以弄清楚如何添加新的 return this._users.findOne({username})
.then(user => {
if (!user) throw new LogicError(`user ${username} does not exist`)
return this._users.updateOne(
user,
{$push: {"contacts": contact}}
)
})
,而不是如何检查数组中是否存在新的findOne
并在这种情况下执行合并。
我有
contact
我的想法是先对catch
进行检查,以查看数组中是否已存在<span data-ng-bind-html="vm.myvalue | {{ vm.myfilter }}"></span>
,并且仅在缺少上述代码的情况下才将其添加,但是我没有知道如何处理不存在的情况-也就是说,如果我使用Promises,我是否将上面的“ add”代码放在<span data-ng-bind-html="vm.myvalue | {{vm.chooseFilter()}}"></span>
中?
我确定必须有一种解决此问题的方法,并且我一直在研究Stack Overflow,但尚未找到解决方案。任何帮助,不胜感激!
答案 0 :(得分:1)
您可以尝试:
var contact={"contact":{"name":"abd"}};
db.users.update(
{$and:[{"username":"abc"},
{"contacts": {$nin: [{"contact":{"name":"abd"}}]}}
]},
{$push: {"contacts": contact}});