【发布时间】:2014-03-22 23:26:52
【问题描述】:
假设我有一个用户模式:
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,而不是两个。 -
我收到此错误:{"code":"InternalError","message":"Cannot read property 'userFollows' of null"} 使用我的查询和上面的查询
标签: arrays node.js mongodb mongoose mongodb-query