假设我有一个用户模式:
UserSchema = new Schema({
name: {
first: { type: String, trim: true },
last: { type: String, trim: true }
},
username: { type: String, trim: true, required: true },
email: { type: String, trim: true, required: true },
hashed_password: { type: String, trim: true, required: true },
profile_image: { type: String, trim: true, default: 'default' },
join_date: { type: Date, required:true },
userFollows: [ {
status : { type: String, enum: [
'following',
'followed_by'
]},
added : { type: Date, required:true },
user : { type: Schema.ObjectId, ref: 'User'}
} ]
})
我需要将一个新用户关注(userFollows)推入这个模式中,但我还需要检查该用户当前是否已经关注了该用户(重复条目),但不确定如何执行此查询。
我正在尝试使用的当前查询是:
User
.findOne(
{ username: req.user.username },
{ "userFollows.user": { $not: req.body.userID } }
)
.exec(function (err, currentUser) {
})
但它没有起作用。
我希望在执行查询后避免通过循环遍历currentUser.userFollows数组并手动检查。
我需要推送的最终userFollows对象如下:
{
_id: ObjectId("53073acd9256e81e4d7b5d8e"),
status: "followed_by",
added: ISODate("2014-02-21T11:38:53.828Z"),
user: ObjectId("51c6ec9fedc1230700000007")
}
findOne { username: req.user.username, "userFollows.user": {$ne: req.body.userID} }
这样的代码应该可以工作。重要的区别在于使用一个对象调用 findOne,而不是两个。 - Andreas Hultgren