这里可能很简单。 我有2个mongoDb集合,一个(用户)有一个objectId,另一个(上市)有userId。
我想通过搜索objectId(currentUser._id)来获取列表集合中的文档。
我该怎么做?
页面组件我想在以下位置显示列表:
export class ManageComponent implements OnInit {
listing : Listing;
listings: Listing[] = [];
currentUser: User;
constructor(
private listingService: ListingService,
private userService: UserService) {
this.currentUser = JSON.parse(localStorage.getItem('currentUser'));
}
ngOnInit() {
this.loadAllListings();
}
private loadAllListings() {
this.listingService.getAll().subscribe(listings => { this.listings = listings; });
}
private loadById(userId: string) {
this.listingService.getById(userId).subscribe(listings => { this.listings = listings});
}
}
我有一个用于CRUD操作的列表服务(一些省略)
import { Injectable } from '@angular/core';
import { Http, Headers, RequestOptions, Response } from '@angular/http';
import { Listing } from '../_models/index';
@Injectable()
export class ListingService {
constructor(private http: Http) { }
getAll() {
return this.http.get('/listings').map((response: Response) => response.json());
}
getById(_id: string) {
return this.http.get('/listings/' + _id).map((response: Response) => response.json());
}
getByUserId(userId: string) {
return this.http.get('/listings/' + userId).map((response: Response) => response.json());
}
create(listing: Listing) {
return this.http.post('/listings/add', listing);
}
使用服务器端服务的服务器端列表控制器(见下文):
function getRelevant(req, res) {
listingService.getByUserId(req.listing.sub)
.then(function (listing) {
if (listing) {
res.send(listing);
} else {
res.sendStatus(404);
}
})
.catch(function (err) {
res.status(400).send(err);
});
}
服务器端列表服务:
function getByUserId(userId) {
var deferred = Q.defer();
db.listings.findById(userId, function (err, listing) {
if (err) deferred.reject(err.name + ': ' + err.message);
if (listing) {
// return listing
deferred.resolve(listing);
} else {
// listing not found
deferred.resolve();
}
});
return deferred.promise;
}
答案 0 :(得分:0)
db.listings.aggregate([$ lookup:{ 来自:"用户", localField:" currentUser._id", foreignField:" _id", as:"结果" } } ])。找一个({ user_id:您要搜索的ID })
答案 1 :(得分:0)
MongoDB的函数findById()
将按功能运行的Id找到当前模型的文档(db.listings.findById()
将按列表ID查找所有列表)。
也就是说,如果您希望find
按照模型中的其他条件(listing
)。你需要做find({query})
。
特别是在您的情况下,您需要:
const query = {userId: userIdThatIsPassedIn};
db.listings.find(query).exec(callback);